ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Webpack打包到宝塔上线:前端部署保姆级教程

Webpack打包到宝塔上线:前端部署保姆级教程 Webpack打包到宝塔上线前端小白也能搞定的部署保姆教程如果你正卡在“前端开发完项目不知道怎么上线”这一步那这篇文章就是写给你的。很多前端新手甚至工作一两年的前端写代码没问题一提到部署就发怵。本地跑着好好的项目一到服务器上就白屏、404、接口报错各种姿势的坑踩到怀疑人生。我自己刚入行那会儿也这样后来被项目逼着在服务器上折腾了几个月摸爬滚打之后才逐渐理清。其实前端部署没那么神秘搞清楚一条链路就通了Webpack把源码打包成静态文件再把静态文件扔到宝塔面板搭建的Nginx站点最后配置好路由和反向代理就是这么回事。今天我就把这个流程从头到尾拆开了讲带着你走一遍看完你也能自己把项目搞上线。这里先说清楚本文的核心是基于Webpack 打包 宝塔面板Nginx 环境部署静态前端项目。适合谁会用到刚学完框架想自己上线个人项目的学生公司里需要独立负责前端发版的初级工程师以及想搞明白前端部署原理的任何人。整篇文章没有任何藏着掖着的地方每一步都按实际操演的心得来讲包括中途我踩过的坑都会一并标出来帮你提前避开。1. 整体项目部署思路拆解1.1 前端部署链路的基本认知在正式开始之前先把概念理清楚。很多人一想到“部署”就觉得要会后端、要会Linux、要会运维。其实对于前端静态资源来说部署的本质很简单你的项目经过构建之后产出了一堆 html、css、js、图片等静态文件你只需要一个能托管静态文件的 Web 服务器让别人能通过域名访问到这些文件部署就完成了。Webpack 在这里扮演的角色是“打包工”。它把你写的 ES6 语法、SCSS、Vue/React 组件、图片引用全部处理成浏览器能直接识别的静态资源同时还能做代码压缩、文件指纹、按需加载这些事情。我见过不少新人把 Webpack 当成一个很难的东西实际上你只要理解它干活的逻辑比那些框架本身要简单太多。整个链路可以画成一条流水线源码目录src → Webpack 构建build → 产物目录dist → 上传服务器宝塔站点目录 → Nginx 托管并配置路由与代理 → 域名访问。是不是比你想得简单这里面每一步都有它自己的讲究下面逐个展开。1.2 为什么选择宝塔面板而非裸 Nginx既然有了 Nginx 就能托管静态文件为什么还要用宝塔说实话如果你对 Linux 命令非常熟练直接在服务器上 apt install / yum install 然后手写 Nginx 配置当然完全可行。但问题在于大部分前端工程师对服务器运维是不太熟悉的直接面对 console 窗口本身就心理门槛极高一旦 Nginx 配置写错连怎么排查都不知道。宝塔面板存在的意义就是把这些繁琐的服务器操作变成“可视化点击”。你不用记那些乱七八糟的 yum 源、不担心 Nginx 编译参数、不用手动配 SSL 证书申请宝塔直接把 LNMP 或 LAMP 环境给你集成好网站站点开一个就是一个配置好的 Nginx 虚拟主机配置文件你在后台改配置即可改完能立刻看到效果。所以我的思路很清楚用宝塔减少部署环境的运维成本和心智负担把精力集中在前端构建和和项目的静态文件本身上。这不是说宝塔有多高级而是它的图形化操作能让你规避掉大量底层环境问题——这些环境问题对于前端人来说是真的“杀鸡用牛刀”。我还得提醒一句宝塔虽然方便但生产环境里一定要设置安全入口和强密码这个后文会讲。1.3 环境准备与版本选择动手之前先把环境定下来。本教程我基于以下版本组合实践过跑得非常顺你可以作为参考工具/组件版本建议说明Node.js本机16.x 或 18.x LTSWebpack 5 对 Node 版本要求不高但 14 以下尽量别碰了Webpack5.x目前最稳定的版本v4 升级上来的也建议直接 5宝塔面板最新正式版直接在官网获取安装脚本Nginx宝塔内1.20宝塔可一键安装服务器 OSCentOS 7.9 / Ubuntu 22.04我用 CentOS 和 Ubuntu 跑过均无问题这里多说一句 Node 版本。很多新手喜欢装最新版 Node其实在开发机上是没太大问题的但如果你要在服务器上也跑构建脚本比如 CI/CD建议统一用 LTS 版本避免 Node 版本差异导致打包兼容性问题。在我的实践中Node 18 Webpack 5 是当前最稳的组合。另外服务器内存不低于 1G。虽然部署静态资源不费内存但你在服务器上跑 npm install/打包的时候512M 的内存会直接卡死。这个我被人坑过很多次后面会写。2. Webpack 从零到一的打包配置实战2.1 初始化项目与安装依赖假设你已经有一个前端项目或者刚用 create-react-app / Vue CLI 建好的工程。这里我直接用最轻量的方式演示——一个手写的 Webpack 配置工程因为这样才能讲清楚 Webpack 本身是怎么运转的。你要是用 Vue CLI 或 Create React App原理也完全一样底层同样是 Webpack只是封装了。先创建项目目录并初始化 package.jsonmkdir webpack-deploy-demo cd webpack-deploy-demo npm init -y然后安装 Webpack 相关的核心依赖npm install webpack webpack-cli --save-dev这一步会安装 Webpack 本体和命令行工具。如果你用的是 Webpack 4 或更早版本webpack-cli 是单独分离的现在 5.x 版本直接装 webpack-cli 就行。装完你可以执行npx webpack -v验证一下能打印出版本号就说明基本装好了。接下来安装开发服务器和 HTML 模板插件。开发服务器devServer负责本地调试html-webpack-plugin 负责自动生成 index.html 并把打包后的 JS 自动注入到 HTML 里npm install html-webpack-plugin --save-dev npm install webpack-dev-server --save-dev如果要处理样式和图片资源还需要安装 loadernpm install style-loader css-loader file-loader --save-devWebpack 5 里处理图片资源其实已经内置了 Asset Modules不一定需要 file-loader。但为了兼容老项目习惯我也一并列出实际操作你可以按需选择。2.2 手写一个能跑的 webpack.config.js在项目根目录创建webpack.config.js。很多新手一看到配置文件就头皮发麻其实配置的核心就几件事入口entry在哪里、出口output到哪去、遇到不同类型的文件用什么 loader 处理、要做什么插件增强。记住这个逻辑配置写起来就有方向了。你先写一个最简配置const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); module.exports { // development 方便本地调试正式构建时用 production mode: development, // 项目入口文件 entry: ./src/index.js, // 输出配置 output: { filename: js/[name].[contenthash:8].js, path: path.resolve(__dirname, dist), clean: true, publicPath: / }, module: { rules: [ { test: /\.css$/i, use: [style-loader, css-loader] }, { test: /\.(png|jpe?g|gif|svg|webp)$/i, type: asset/resource, generator: { filename: images/[name].[contenthash:8][ext] } } ] }, plugins: [ new HtmlWebpackPlugin({ template: ./public/index.html, inject: body }) ], devServer: { port: 3000, hot: true, open: true } };上面这个配置干了什么entry 告诉 Webpack 从src/index.js开始打包output 里的[contenthash:8]是文件内容哈希只要文件内容变生成的文件名就变这是解决浏览器缓存不更新的关键clean: true会在每次打包前自动清空 dist 目录避免旧文件残留。html-webpack-plugin 根据public/index.html模板生成最终的 html并且自动把打包后的 js 文件地址插入到 html 里。如果项目里要用到 Vue 或者 React那就再加对应的 loader 或插件。以 Vue 3 为例需要安装vue-loader和vue/compiler-sfc并在配置里追加规则。React 则需要babel-loaderbabel/preset-react。因为大部分前端项目都基于框架开发这里就举 Vue 3 的例子其他框架思路完全一样。// Vue 3 项目你需要增加这些配置 const { VueLoaderPlugin } require(vue-loader); module.exports { module: { rules: [ { test: /\.vue$/, loader: vue-loader } ] }, plugins: [ new VueLoaderPlugin() ] };2.3 打包优化配置让产物更小更合理如果你只是“能打包”那离“能上线”还差两步产物体积要可控兼容性要达标。先说体积默认的 Webpack 配置往往会打出一个很大的 bundle.js尤其是你把第三方库都打进主包以后。优化思路很清晰把第三方依赖单独拆包利用浏览器缓存减少重复下载。Webpack 5 内置了splitChunks配置如下module.exports { optimization: { splitChunks: { chunks: all, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: vendors, priority: 10, chunks: all } } } } };拆包之后你会发现 dist/js 下多了一个 vendors 文件这是所有 node_modules 里第三方库的集合。这样做的好处是你改业务代码vendors 文件哈希不变浏览器直接走缓存不用重新下载整个大包。兼容性方面生产环境必须处理 ES6 语法到 ES5 的转换。不然你代码里用了?.可选链到了低版本浏览器会直接白屏。安装 Babelnpm install babel-loader babel/core babel/preset-env --save-dev配置如下module.exports { module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: babel-loader, options: { presets: [[babel/preset-env, { targets: 0.25%, not dead }]] } } } ] } };targets的意思是兼容全球使用率大于 0.25% 且还在维护中的浏览器。你也可以根据自己的业务场景指定覆盖范围面向国内用户的项目可以加last 2 versions和not ie 8。再补充一个很实用的配置生产环境开启 gzip 压缩插件。Nginx 本身可以做 gzip但 Webpack 侧先把文件压缩好Nginx 可以直接用预压缩文件减少服务器 CPU 开销。用compression-webpack-pluginnpm install compression-webpack-plugin --save-devconst CompressionPlugin require(compression-webpack-plugin); module.exports { plugins: [ new CompressionPlugin({ test: /\.(js|css|html|svg)$/, threshold: 10240, minRatio: 0.8 }) ] };上面配置的意思是对超过 10KB 的 JS/CSS/HTML/SVG 文件进行压缩压缩比小于 0.8 才保留压缩产物避免压缩后收益太小的文件也生成 .gz。2.4 环境变量与生产构建命令实际项目里开发环境的接口地址和生产环境的接口地址往往不一样。解决这个问题不能靠手改代码要通过环境变量来区分。安装dotenv或使用 Webpack 5 内置的DefinePlugin。我用的是cross-env加自定义环境文件的方式npm install cross-env --save-dev然后在 package.json 里加两条构建命令scripts: { dev: webpack serve --mode development, build:prod: cross-env NODE_ENVproduction webpack --mode production }在你业务代码里就可以这样判断环境const API_BASE_URL process.env.NODE_ENV production ? https://api.example.com : http://localhost:3000;实际项目中我习惯用.env.development和.env.production两个文件维护不同环境的地址配合dotenv-webpack插件读取。这样以后其他人接手项目时只需要看环境变量文件就能找到接口配置不用满项目翻代码。构建完毕后主项目目录下会多出dist目录里面有index.html、js子目录、images子目录等。这个 dist 目录就是你要上传到服务器的全部内容。3. 宝塔面板服务器环境搭建全流程3.1 服务器基础配置与安全设置先说服务器选择。如果你只是练手买个最便宜的云服务器就够如果是要跑真实业务2核4G 起步会比较舒服毕竟 Nginx 和系统本身也要占用内存。操作系统我建议用 CentOS 7.9 或 Ubuntu 22.04宝塔对这两个系统支持最完善。服务器到手后第一步是重置 root 密码并创建一个非 root 用户可选但推荐。然后去云控制台的安全组规则里确认放通了 22SSH、80HTTP、443HTTPS端口。很多新手部署完了网站访问不了十有八九是安全组没放行端口不是 Nginx 配错了。这个检查顺序很重要。宝塔面板安装很简单官方提供了自动化安装脚本。在服务器终端执行CentOS 安装脚本以官方最新发布为准 yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh Ubuntu/Debian 安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh sudo bash install.sh安装完成后终端会显示面板访问地址、账号和初始密码。注意保存下来首次登录会强制要求修改密码。登录宝塔面板后系统会提示安装 LNMP 环境这里只选择 Nginx 1.20 即可PHP 和 MySQL 如果暂时不需要就不装。前端静态项目不需要 PHP 和 MySQL装了反而增加服务器负担。注意宝塔的安全设置里一定把面板默认的 8888 端口改掉并绑定额外安全入口路径。否则服务器暴露在公网上会持续遭受扫描攻击这是我见过太多人踩的坑。此外建议在宝塔的“安全”页签里放行端口时只放开必要的端口不要用 0.0.0.0/0 全放开。3.2 宝塔上创建站点并上传前端资源环境装好后开始创建站点。在宝塔面板左侧菜单点击“网站” → “添加站点”填写你的域名如果没有域名可以先填服务器公网 IP后面再改。创建时会自动生成一份 Nginx 配置网站的根目录默认在/www/wwwroot/你的域名下这就是你要放前端文件的目录。创建完成后有两种方式把 dist 目录里的文件传上去方式一宝塔自带的文件管理器上传。在宝塔后台进入你的站点根目录点击上传选中 dist 下的全部文件等进度条走完即可。适合文件量小、不常发版的场景。缺点是文件多了以后一次传很慢而且容易漏传。方式二使用压缩包上传更省心。先在本地把 dist 目录压缩成 zip然后上传压缩包上传完后在宝塔后台解压再把解压出来的文件移动到站点根目录。这种方式文件传输速度快而且不会因为一个个小文件上传超时。我强烈推荐这个方式尤其是前端项目几十个 JS 文件很正常。上传完成后直接在浏览器访问你的域名或 IP。如果一切正常你就能看到你的页面了——但通常不会这么顺利大概率遇到的是白屏或者 404。别急这是所有新手都会经历的下一节就把这些坑挨个说清楚。3.3 Nginx 核心配置路由重写与端口监听前面是不是顺利访问了呢如果项目是纯静态页面且没有用到前端路由即没有 history 模式的 vue-router / react-router那到现在确实已经上线了。但大部分项目都用了前端路由这时就会遇到刷新页面 404 的问题。原因很简单前端路由在浏览器地址栏里看似是/home、/detail/1但服务器上其实没有这些目录Nginx 拿着/home去找文件当然找不到。正确的做法是在 Nginx 配置里加一句话任何不存在的文件路径都统一重写到 index.html 上把路由的处理权交还给前端框架。在宝塔面板“网站”列表中找到你的站点点击“设置” → “配置文件”找到location /这一段改成如下配置location / { root /www/wwwroot/你的域名; index index.html; try_files $uri $uri/ /index.html; }try_files $uri $uri/ /index.html的意思是先尝试按请求的完整路径找文件找不到就找目录还找不到就返回 index.html。这样前端路由就接管了后续的页面展示逻辑。如果你的项目不是部署在域名根路径而是子路径比如https://example.com/shop/那还需要配合 Webpack 配置里的output.publicPath: /shop/和路由的base: /shop/否则静态资源路径会全部 404。这个细节最容易忽略很多人部署到子目录就白屏十有八九是 publicPath 没设置。另外如果你的接口服务器是独立的域名比如 api.example.com那前端项目里直接请求完整接口地址即可Nginx 不用额外配置但如果接口路径和前端同域比如/api前缀那就需要在 Nginx 里配置反向代理把/api转发到后端服务器location /api/ { proxy_pass http://你的后端服务器IP:端口/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }这行配置是我见过后端联调部署里使用频率最高的。反向代理写不对的典型症状是页面能打开但登录请求失败、列表请求 404 或 502。确认一下 Nginx 配置里的proxy_pass是否拼接正确注意末尾的斜杠有没有带这决定了请求路径要不要拼上/api后的一段。3.4 SSL 证书申请与 HTTPS 强制跳转上线一个站点现在条件上基本是必须开 HTTPS 的否则浏览器会直接提示不安全部分浏览器甚至会拦截资源请求对 SEO 也不友好。宝塔让 SSL 配置变得极为简单。在站点设置里点击“SSL”选项卡选择“Lets Encrypt”申请免费证书勾选你要保护的域名宝塔会自动申请并部署证书。证书有效期 90 天宝塔自带自动续期计划任务不用你手动去管。证书部署完成后在“配置文件”里加一段强制 HTTP 跳转 HTTPSserver { listen 80; server_name 你的域名; return 301 https://$host$request_uri; }这段配置的意思是所有 80 端口的请求都返回 301 跳转到 HTTPS 地址。在实际操作中宝塔后台也有一个“启强制 HTTPS”的按钮直接一键操作即可它会自动帮你修改配置。这里有个细节值得注意如果你部署的是纯前端静态资源SSL 证书生成的配置文件会修改站点的 Nginx 配置注意别覆盖掉之前加的try_files路由重写。我见过很多次配置 SSL 后前端路由刷新 404 的问题又出现了就是配置被重置了。改完后记得检查location /那段是否保留了。4. 部署实操过程与核心环节记录4.1 完整操作流程手记从零到可见这一节我按自己最近一次实际部署一个 Vue 3 项目的完整流程来做记录每个细节都标注清楚你可以照着操作。阶段一本地构建在项目根目录执行npm run build:prod构建过程中Webpack 会执行编译、压缩、hash 生成、gzip 压缩等步骤。构建完成后看到 dist 目录先本地验证一下产物是否正常。本地验证建议安装一个http-server或serve工具cd dist npx serve -l 8080浏览器访问http://localhost:8080确认页面能正常展示接口跨域问题先不用管本地开发环境会代理只看静态页面的渲染和前路由是否正常。这一步非常关键能提前筛选出“打包配置错误”和“路由配置错误”这两类问题别等上传到服务器了再排查。阶段二压缩与上传在 dist 目录同级执行zip -r dist.zip dist/*将 dist.zip 上传到宝塔放到站点根目录/www/wwwroot/你的域名/下然后在宝塔后台解压。解压完成后记得验证一下目录结构index.html 应位于站点根目录的一级不要在 dist 子目录之下。比如https://你的域名/能直接访问到 index.html而不是https://你的域名/dist/index.html。很多新手上传完后忘记调整目录层级导致宝塔站点根目录是/www/wwwroot/域名/dist/访问的时候就必须加/dist/才能打开页面。这是我的重复踩坑点放到这里必须强调宝塔和其它情况同理。阶段三Nginx 配置与验证按前面章节所述的try_files、反向代理、SSL 配置全部完成后在宝塔站点设置里点击“重载配置”或“重启 Nginx”。然后在浏览器依次验证以下几个关键项访问https://你的域名/首页能打开点击路由跳转到/home、/detail/1等页面能正常显示直接刷新/home页面不出现 404页面所有静态资源JS/CSS/图片都走 HTTPS 正常加载F12 打开 Network 面板确认接口请求是 HTTP 200 而不是 502 / 404。这 5 步验证全部通过部署流程就算彻底完成了。4.2 前端版本迭代与更新发布策略一旦项目上线后续就会面临版本迭代问题。前端发布有个很简单但特别实用的原则每次发布前先把 rewrited 后的 try_files 机制搞清楚并且保证旧文件能及时清理新的内容能覆盖上去。在宝塔后台更新前端文件常规操作是本地打包新版 dist → 压缩 → 上传 → 覆盖解压。这里有个小坑旧文件被覆盖后浏览器缓存可能还留着旧的 JS/CSS 文件导致页面显示的还是老版本。不过因为我们用 Webpack 打包时给文件名设置了 contenthash文件内容变了文件名也会变index.html 里引用新文件名的地址浏览器自然就不会用旧缓存了。所以部署新版本时永远不要覆盖同名文件这句话在内容哈希策略下永远成立。最安全的做法是上传解压前先清空站点根目录里的旧文件或者直接删掉 dist 目录重新解压。宝塔后台支持直接对目录执行删除操作然后在压缩包里解压过程很简单。你别图省事直接上传覆盖旧拆包文件残留在站点根目录既占空间又有被直接访问到旧接口的风险而且内容哈希策略白搭。对于版本回滚我的做法是每次发布前把当前的站点目录复制一份备份到/www/wwwroot/backup/你的域名_日期时间/。出问题时把备份目录里的文件手动覆盖回站点根目录即可。这个办法靠着最少的技术手段实现了可靠性非常值得推荐。4.3 使用宝塔计划任务实现定时备份说到备份除了手工备份宝塔的“计划任务”功能也值得一用。在宝塔面板左侧“计划任务”里添加一个 Shell 脚本任务可以设定每天或每周自动打包站点目录到备份目录cd /www/wwwroot tar -zcf /www/backup/$(date %Y%m%d%H%M).tar.gz 你的域名然后把备份文件自动同步到指定目录注意设置保留最近 7 天的备份避免磁盘撑爆find /www/backup -name *.tar.gz -mtime 7 -exec rm -f {} \;这个备份任务建议所有部署到宝塔的项目都配上。实际项目中数据比什么都值钱尤其是好不容易调通的环境。定时备份是对自己工作成果的最低保障。4.4 移动端适配与浏览器兼容细节部署上线后第一件事是用手机访问一下看看页面是否正常。这里的正常不仅指布局不错位还包括资源加载情况。有些坑是本地电脑上发现不了的Nginx 默认配置下部分静态资源大文件加载缓慢。解决办法是在 Nginx 的http块或站点配置里开启 gzip宝塔默认已经开启但proxy_buffering等参数可能还需要优化。某些手机上访问是白屏电脑上却好的。大概率是 Babel 没把你的依赖代码node_modules 里的某些库转成 ES5。特别是引入了比较新的第三方 npm 包时打包时要把这些包加入 Babel 的include范围。图片懒加载失效用手机流量一片空白。这种情况通常是图片服务器跨域了前端项目里用了图片懒加载懒加载触发检查的是>const { NodeSSH } require(node-ssh); const ssh new NodeSSH(); async function deploy() { await ssh.connect({ host: 你的服务器IP, username: root, privateKeyPath: ~/.ssh/id_rsa }); await ssh.putDirectory(dist, /www/wwwroot/你的域名, { recursive: true, concurrency: 10 }); console.log(部署完成); ssh.dispose(); } deploy();这个脚本省去了压缩、上传、解压的步骤直接递归把 dist 目录同步到服务器。注意putDirectory是合并式的不会自动删除服务器上多余的旧文件。如果你需要严格同步需要先远程执行删除再上传。这个细节要想清楚。6.2 面向发布环境的优雅降级策略真实业务上线后还会有一个小概率事件后端发版期间前端请求接口出现短时间 502/504。这时候用户看到的就是一堆错误提示很影响体验。经验丰富的团队会在前端代码中统一封装一个请求错误处理层后端报错时捕获异常并提示“服务升级中请稍后重试”而不是白屏。这个策略不算部署的一部分但作为“上线后需要做的事”非常值得提醒。前端部署不只是把静态文件放上去还包括上线后的监控、报错反馈机制。至少你可以在项目中接一个简单的全局错误上报比如 window.onerror 上报到自己的后端这样用户遇到问题时你是第一个知道的而不是被动等用户反馈。6.3 我的部署心得那些没人告诉你的事最后聊聊几个我踩过多次、也看别人反复踩的坑。第一服务器时区一定要设置为 Asia/Shanghai。很多 Linux 系统默认时区是 UTC会导致你的日志时间、备份文件时间、SSL 证书续期的判断都和你实际预期差 8 个小时。宝塔的“终端”里执行以下命令timedatectl set-timezone Asia/Shanghai第二Nginx 的防火墙不能靠宝塔一个开关就放心。宝塔的“安全”页签可以放行端口但服务器本身的防火墙firewalld 或 ufw如果不放行同样会阻止外部访问。有些云服务商的安全组还需要额外配置。三处都要排查我见过太多人只配了宝塔。第三没事多看看 Nginx 的错误日志。宝塔的“网站” → “设置” → “网站日志”里能看到请求日志错误日志在/www/wwwlogs/你的域名.error.log。这个文件是我排查服务器问题时第一个打开的文件比什么逻辑推导都快。有时候问题根本不复杂就是代理写错或路径写错日志里一两行就能看出端倪。部署这件事本质上就是“构建 → 传输 → 托管 → 配置”四部曲。把这个链路吃透了不管以后用什么 CI/CD 工具、K8s 还是纯手动你都能很快上手。希望这篇教程能帮你顺利走通第一遍之后就会越来越熟练。如果你在按照这个流程操作时遇到任何我文中没提到的报错建议先不要急着搜索先定位是构建阶段的问题还是 Nginx 配置阶段的问题把问题切到对应环节里再排查思路清楚了大半的问题都能自己解决。
返回列表