news 2026/10/15 11:26:37

若依Vue前端部署实战:Nginx配置、路径映射与生产环境避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
若依Vue前端部署实战:Nginx配置、路径映射与生产环境避坑指南

1. 为什么“若依Vue入门”卡在部署这一步?——多数人忽略的环境认知断层

“若依Vue入门——服务器部署篇”,这个标题看似平实,实则藏着一个高频痛点:大量开发者能跑通本地开发环境,却在最后一步——把 Vue 前端项目真正放到服务器上对外提供服务时彻底卡死。我见过太多某高校实训班的学生、某公司转岗的测试同事、甚至刚入职的前端新人,在 GitHub 拉下若依(RuoYi-Vue)代码、npm install成功、npm run serve本地预览丝滑流畅后,信心满满地准备上线,结果面对 Nginx 配置、反向代理路径、静态资源路径、跨域残留、生产环境 API 地址切换等一系列问题,直接陷入“页面白屏”“接口404”“登录跳转失效”的三连击。

这里的关键陷阱在于:“若依Vue”不是单个 Vue 项目,而是一个前后端分离架构下的前端子系统,它天然依赖后端(Spring Boot)提供接口,并受制于真实网络环境的路由规则与安全策略。很多人误以为“打包完丢到服务器就行”,本质上是混淆了“静态文件托管”和“生产级 Web 应用部署”两个维度。前者只要 HTTP 服务能读取 HTML 文件即可;后者则必须处理:请求路径如何映射、API 请求如何透传、浏览器同源策略如何规避、用户会话如何维持、错误资源如何兜底。

更隐蔽的认知断层在于构建产物本身。npm run build生成的dist/目录里,index.html是入口,但它的<script>标签引入的 JS/CSS 文件路径默认是相对路径(如/js/app.xxxx.js),这个/指的是Web 服务器的根路径,而非你上传文件的物理目录。如果你把dist/整体放在 Nginx 的/var/www/html/ruoyi-front/下,但没配置location /ruoyi-front/的别名或重写规则,浏览器就会去请求https://your-domain.com/js/app.xxxx.js,而实际资源在https://your-domain.com/ruoyi-front/js/app.xxxx.js—— 这就是白屏的根源。这不是代码 bug,是环境契约没对齐。

另一个常被忽视的点是若依的“双模式”特性。若依-Vue 提供两种典型部署形态:一种是前端完全静态化,所有 API 通过 Nginx 反向代理到后端(推荐,最常见);另一种是前端与后端共用同一域名,仅靠路径前缀区分(如/admin/走前端,/prod-api/走后端)。很多人只看了文档里“修改vue.config.js的publicPath”,却没同步调整 Nginx 的location块和后端的server.servlet.context-path,导致路径错位层层嵌套。我曾帮一位某公司运维同事排查,他改了前端publicPath: '/ruoyi/',Nginx 却配了location / { root /var/www/ruoyi; },结果所有请求都 404,因为 Nginx 根本没匹配到/ruoyi/这个路径。

所以,“服务器部署篇”的核心,从来不是教你怎么敲几行命令,而是帮你建立一套完整的“环境-构建-服务”映射心智模型。接下来的内容,我会以一个真实可复现的最小闭环为例,从零开始,不跳过任何一个看似微小却致命的环节,带你亲手把若依 Vue 前端稳稳落地到一台干净的 CentOS 7 服务器上。所有步骤均基于若依官方 v4.8.x 分支(当前最新稳定版),适配主流云服务器环境,拒绝“理论上可行”的模糊描述。

2. 构建前的三道必答题:环境、路径、代理策略的终极确认

在敲下npm run build之前,必须完成三个关键决策。它们像三把锁,缺一不可,否则构建产物与服务器环境必然失配。我建议你拿出纸笔,逐项确认并记录答案,这是后续所有操作的基石。

2.1 你的目标访问域名与路径前缀是什么?

这是所有路径配置的源头。假设你已备案并解析好域名www.example.com,那么你需要明确:

  • 方案A(推荐):独立子路径部署
    前端访问地址:https://www.example.com/ruoyi/
    后端 API 地址:https://www.example.com/prod-api/
    此方案清晰隔离前后端,Nginx 配置简单,适合多系统共存场景。此时,前端publicPath必须设为/ruoyi/,且 Nginx 中需定义location /ruoyi/块。

  • 方案B:根路径部署(需确保无其他应用)
    前端访问地址:https://www.example.com/
    后端 API 地址:https://www.example.com/prod-api/
    此方案用户体验最简洁,但要求该域名下仅运行若依。此时publicPath设为/,Nginx 的root指向dist/目录,location /块负责静态文件,location /prod-api/负责反向代理。

提示:切勿选择“前端根路径 + 后端根路径”(即publicPath: '/'且后端也部署在/)。这会导致前端 HTML 和后端 Spring Boot 的DispatcherServlet冲突,所有非静态资源请求都会被前端index.html拦截,造成 API 404。这是新手最高频的误操作。

2.2vue.config.js中publicPath与outputDir的精确计算

publicPath不是随意填写的字符串,它直接决定构建后所有资源的引用路径。其值必须与你在 2.1 中确定的前端访问路径前缀完全一致。

  • 若选方案A(/ruoyi/):publicPath: '/ruoyi/'
  • 若选方案B(根路径):publicPath: '/'

注意末尾斜杠!'/ruoyi'(无斜杠)会导致 JS 文件请求路径变成/ruoyijs/app.xxxx.js,直接 404。

outputDir则定义构建产物存放位置,默认dist。为便于管理,建议显式指定:

module.exports = { publicPath: '/ruoyi/', // 严格匹配2.1决策 outputDir: 'dist-ruoyi', // 生成 dist-ruoyi/ 目录,避免与本地开发dist混淆 // ... 其他配置 }

这样npm run build后,你会得到一个清晰命名的dist-ruoyi/文件夹,里面包含index.html和js/,css/,img/等子目录。

2.3 Nginx 反向代理的路径映射逻辑与后端配置联动

这是最容易出错的环节。若依前端的 API 请求地址(如axios.get('/prod-api/system/user/list'))在浏览器中发出时,实际 URL 是https://www.example.com/prod-api/system/user/list。Nginx 必须将所有以/prod-api/开头的请求,转发给后端 Spring Boot 服务(假设其监听http://127.0.0.1:8080)。

关键点在于:Nginx 转发时是否需要重写路径?

  • 若后端 Spring Boot 的server.servlet.context-path配置为空(默认),即 API 实际路径是http://127.0.0.1:8080/system/user/list,那么 Nginx 的proxy_pass必须去掉/prod-api/前缀,否则会转发成http://127.0.0.1:8080/prod-api/system/user/list,后端必然 404。
    正确配置:
    location /prod-api/ { 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; proxy_pass http://127.0.0.1:8080/; # 注意末尾的 /,它会剥离 /prod-api/ }
  • 若后端server.servlet.context-path=/prod-api,则 API 实际路径是http://127.0.0.1:8080/prod-api/system/user/list,此时proxy_pass可写为http://127.0.0.1:8080/prod-api/(末尾带/),Nginx 不做路径剥离。

注意:务必检查后端application.yml中的server.servlet.context-path值,并与 Nginx 配置严格对应。我曾在一个模拟项目X中,因后端配置了context-path: /api,而 Nginx 仍按/prod-api/代理,导致所有接口返回 404,排查了两小时才定位到这个配置错位。

3. 从零搭建服务器环境:CentOS 7 上的 Nginx 与 Node.js 安装实录

现在,我们进入真正的服务器操作环节。以下所有命令均在一台纯净的 CentOS 7(内核 3.10+)云服务器上执行,全程使用root用户。请确保服务器已开放 80(HTTP)、443(HTTPS)及后端所需端口(如 8080)。

3.1 安装并配置 Nginx:不只是启动服务

CentOS 7 默认源中的 Nginx 版本较旧(1.12),而若依 Vue 对现代 Web 特性(如 HTTP/2、更优的 gzip 压缩)有要求。因此,我们采用官方仓库安装最新稳定版(当前为 1.24.x):

# 添加 Nginx 官方 yum 仓库 sudo rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # 安装 Nginx sudo yum install -y nginx # 启动并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 验证:访问 http://你的服务器IP,应看到 "Welcome to nginx!" 页面

安装完成后,不要急于放行防火墙。先检查 Nginx 默认配置:

sudo cat /etc/nginx/nginx.conf | grep -E "user|worker_processes|events|http"

重点关注user指令,默认为nginx。这意味着 Nginx 工作进程将以nginx用户身份运行,它必须对你的前端文件目录有读取权限。这是后续文件上传权限问题的伏笔。

接着,创建专属的若依前端配置文件,避免污染主配置:

# 创建站点配置目录(若不存在) sudo mkdir -p /etc/nginx/conf.d/sites-enabled # 创建若依前端配置 sudo tee /etc/nginx/conf.d/ruoyi-front.conf << 'EOF' upstream ruoyi_backend { server 127.0.0.1:8080; # 指向后端Spring Boot } server { listen 80; server_name www.example.com; # 前端静态资源(方案A:/ruoyi/ 路径) location /ruoyi/ { alias /var/www/ruoyi-front/; index index.html; try_files $uri $uri/ /ruoyi/index.html; # 支持 Vue Router history 模式 } # API 反向代理 location /prod-api/ { 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; proxy_pass http://ruoyi_backend/; # 末尾 / 表示剥离 /prod-api/ } # 其他静态资源(如 favicon.ico) location ~* \.(ico|gif|jpg|jpeg|png|css|js|woff|woff2|ttf|eot|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } } EOF

关键细节说明:alias /var/www/ruoyi-front/;中的路径末尾必须有/,且alias指向的目录是dist-ruoyi/的父目录。例如,若你上传的dist-ruoyi/在/var/www/ruoyi-front/dist-ruoyi/,那么alias应为/var/www/ruoyi-front/dist-ruoyi/。try_files $uri $uri/ /ruoyi/index.html;是 Vue Router history 模式的灵魂,它确保用户直接访问https://www.example.com/ruoyi/user时,Nginx 能正确返回index.html,由前端路由接管,而非返回 404。

3.2 上传构建产物:权限与路径的双重校验

在本地开发机上,执行构建:

# 确保 vue.config.js 已按 2.1 决策修改 npm run build # 此时生成 dist-ruoyi/ 目录

使用scp将整个dist-ruoyi/目录上传到服务器:

# 从本地执行(替换 your_server_ip) scp -r dist-ruoyi/ root@your_server_ip:/var/www/ruoyi-front/

上传后,立即校验权限:

# 登录服务器 ssh root@your_server_ip # 查看目录结构与权限 ls -l /var/www/ruoyi-front/ # 你应该看到: # drwxr-xr-x 3 root root 4096 Jun 15 10:00 dist-ruoyi # 但 Nginx 进程以 nginx 用户运行,它无法读取 root 所有、无组读权限的文件! # 修复权限(关键!) sudo chown -R nginx:nginx /var/www/ruoyi-front/ sudo chmod -R 755 /var/www/ruoyi-front/ # 验证 ls -ld /var/www/ruoyi-front/ # 输出应为:drwxr-xr-x 3 nginx nginx 4096 Jun 15 10:00 /var/www/ruoyi-front/

经验之谈:我踩过的最大坑之一,就是上传后curl -I http://www.example.com/ruoyi/返回 403 Forbidden。查日志sudo tail -f /var/log/nginx/error.log显示*1 directory index of "/var/www/ruoyi-front/" is forbidden。原因正是nginx用户对目录无执行(x)权限,无法进入目录。chmod 755中的中间5(即r-x)就是赋予组(nginx)读和执行权限,缺一不可。

3.3 测试与验证:用 curl 模拟浏览器请求链路

在浏览器访问前,先用curl做原子级验证,快速定位问题层级:

# 1. 验证 Nginx 是否响应前端路径 curl -I http://www.example.com/ruoyi/ # 应返回 HTTP/1.1 200 OK,且 Content-Type: text/html # 2. 验证静态资源(JS 文件) curl -I http://www.example.com/ruoyi/js/app.xxx.js # 应返回 HTTP/1.1 200 OK,Content-Type: application/javascript # 3. 验证 API 代理(模拟登录请求) curl -I -X POST http://www.example.com/prod-api/login # 应返回 HTTP/1.1 200 OK 或 401 Unauthorized(表示代理成功,后端已收到请求) # 如果返回 502 Bad Gateway,则是 Nginx 无法连接后端(检查后端是否运行、端口是否监听、防火墙) # 4. 检查 Nginx 错误日志(万能排查工具) sudo tail -n 20 /var/log/nginx/error.log

如果以上curl命令全部通过,恭喜,你的 Nginx 层面已 100% 就绪。此时再打开浏览器访问https://www.example.com/ruoyi/,大概率就能看到若依的登录页了。

4. 白屏、404、跨域的终极排错手册:从浏览器控制台到 Nginx 日志的全链路追踪

即便完成了上述所有步骤,上线初期仍可能遭遇“页面白屏”、“接口404”、“登录后跳转失败”等现象。这些不是玄学,而是有迹可循的信号。下面是一套经过实战检验的排错流程,覆盖从用户端到服务器端的每一环。

4.1 第一现场:浏览器开发者工具(F12)的四大关键面板

当页面异常时,永远先打开 F12,按顺序检查:

  • Console(控制台):这是最直接的线索库。

    • 若出现Failed to load resource: net::ERR_ABORTED或net::ERR_CONNECTION_REFUSED,说明某个 JS/CSS 文件加载失败。点击该报错,看Request URL是什么。如果是https://www.example.com/js/app.xxx.js,说明publicPath配错了,应为/ruoyi/js/app.xxx.js。
    • 若出现Uncaught SyntaxError: Unexpected token '<',这是经典症状:浏览器期望加载 JS,但服务器返回了 HTML(通常是index.html)。原因:Nginx 的try_files规则未生效,或location块未正确匹配到 JS 路径。检查curl是否能正常获取 JS 文件。
  • Network(网络):观察所有请求的状态码与时间线。

    • 找到index.html请求,查看其Response标签页,确认内容是否为真实的 HTML 代码(搜索<title>应为“若依管理系统”)。
    • 找到第一个 JS 文件(如app.xxx.js),右键Open in new tab,看是否能单独打开。若显示空白或报错,说明路径或权限问题。
    • 找到login接口请求,查看Headers中的Request URL和Response。若Request URL是https://www.example.com/login(缺少/prod-api/),说明前端axios的baseURL配置错误,应检查src/utils/request.js中的baseURL是否为process.env.VUE_APP_BASE_API,且.env.production中该变量值为'/prod-api'。
  • Application(应用):检查Storage > Cookies和Cache > Cache Storage。

    • 若登录后刷新页面,发现用户状态丢失,检查Cookies中是否有Authorization字段。若没有,可能是后端未正确设置Set-Cookie头(需检查后端CorsConfiguration是否允许凭据)。
    • 若修改了代码但页面无变化,强制清空Cache Storage,避免浏览器缓存了旧的index.html。
  • Elements(元素):右键Inspect任意元素,看其src或href属性。

    • 检查<script src="/js/app.xxx.js">中的路径是否符合你的publicPath。若publicPath是/ruoyi/,此处应为<script src="/ruoyi/js/app.xxx.js">。若不是,说明构建时vue.config.js未生效,检查是否在正确的项目根目录下执行npm run build。

4.2 第二现场:Nginx 访问日志与错误日志的精准解读

当浏览器端线索不足时,Nginx 日志是真相的最终裁决者。

  • 访问日志(access.log):记录每一次 HTTP 请求。

    # 实时监控新请求 sudo tail -f /var/log/nginx/access.log # 访问 https://www.example.com/ruoyi/,你应该看到类似: # 123.123.123.123 - - [15/Jun/2024:11:20:30 +0000] "GET /ruoyi/ HTTP/1.1" 200 2843 "-" "Mozilla/5.0 ..." # 123.123.123.123 - - [15/Jun/2024:11:20:30 +0000] "GET /ruoyi/js/app.xxx.js HTTP/1.1" 200 123456 "-" "Mozilla/5.0 ..." # 如果某次请求返回 404,日志中会明确写出 `"/ruoyi/css/app.xxx.css" 404`,直接定位缺失文件。
  • 错误日志(error.log):揭示 Nginx 内部错误。

    # 实时监控错误 sudo tail -f /var/log/nginx/error.log # 最常见错误: # *1 open() "/var/www/ruoyi-front/js/app.xxx.js" failed (13: Permission denied) # 权限问题 # *1 connect() failed (111: Connection refused) while connecting to upstream # 后端未启动或端口不通 # *1 directory index of "/var/www/ruoyi-front/" is forbidden # 目录权限或 index 指令问题

实战案例:某次部署中,curl http://www.example.com/ruoyi/返回 200,但浏览器白屏。access.log显示GET /ruoyi/200,但GET /ruoyi/js/app.xxx.js404。error.log无记录。我立刻意识到是alias路径配置错误。检查发现alias /var/www/ruoyi-front/;指向的目录下,实际存放的是dist-ruoyi/子目录,而非index.html。修正为alias /var/www/ruoyi-front/dist-ruoyi/;后,问题解决。这个案例印证了:日志不会说谎,但需要你读懂它的语言。

4.3 第三现场:后端服务的连通性与配置快照

若Network面板中 API 请求返回 502 或 504,问题一定在 Nginx 与后端之间。

  • 验证后端是否存活:

    # 在服务器上,直接 curl 后端 curl -I http://127.0.0.1:8080/prod-api/login # 应返回 401 或 200,证明后端正常 # 若超时,检查后端进程 ps aux | grep java # 若无进程,启动后端 cd /path/to/ruoyi-backend nohup java -jar ruoyi-admin.jar > backend.log 2>&1 &
  • 验证端口监听:

    # 检查 8080 端口是否被监听 sudo netstat -tuln | grep :8080 # 应输出:tcp6 0 0 :::8080 :::* LISTEN # 若无输出,后端未启动或绑定到了 127.0.0.1:8080(IPv4),而 netstat 显示的是 IPv6。用 ss 替代: sudo ss -tuln | grep :8080
  • 检查后端 CORS 配置:
    若浏览器Console报CORS policy: No 'Access-Control-Allow-Origin' header,说明后端未正确配置跨域。虽然 Nginx 代理后,浏览器认为是同源请求,但若你绕过 Nginx 直接访问后端(如http://服务器IP:8080/prod-api/login),就会触发此错误。检查后端RuoYiConfig.java中的addCorsMappings方法,确保allowedOrigins包含你的域名(如"https://www.example.com")或使用"*"(仅测试环境)。

5. 生产就绪的加固清单:HTTPS、缓存、安全头与自动化脚本

当若依 Vue 前端能稳定访问后,下一步是让它真正达到生产环境标准。以下清单中的每一项,都是我在多个模拟项目X中反复验证过的必要加固点。

5.1 强制 HTTPS:Let's Encrypt 一键部署

HTTP 已是过去式。现代浏览器对非 HTTPS 站点的警告越来越严厉,且若依的登录表单涉及密码,必须加密传输。

使用certbot自动化申请免费证书:

# 安装 certbot sudo yum install -y epel-release sudo yum install -y certbot python3-certbot-nginx # 申请证书(替换 your_domain) sudo certbot --nginx -d www.example.com # 此过程会自动修改 /etc/nginx/conf.d/ruoyi-front.conf,添加 443 server 块和证书路径 # 重启 Nginx sudo systemctl restart nginx

certbot会自动配置 301 重定向,将所有 HTTP 请求跳转到 HTTPS。你只需在浏览器访问http://www.example.com/ruoyi/,它会自动跳转到https://www.example.com/ruoyi/。

注意:若你的域名 DNS 解析未生效,certbot会失败。确保ping www.example.com能返回服务器 IP。

5.2 静态资源缓存策略:提升首屏速度

Nginx 默认不缓存静态文件。为加速用户访问,我们在ruoyi-front.conf的location块中添加:

# 在 server {} 块内,添加以下配置 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 1y; add_header Cache-Control "public, immutable"; } # 对于 HTML 文件,禁用缓存(确保用户总能获取最新版本) location ~* \.html$ { expires -1; add_header Cache-Control "no-cache, no-store, must-revalidate"; }

immutable是关键,它告诉浏览器:“这个文件一年内绝不会变,放心大胆地缓存”。配合 Webpack 的contenthash,每次构建的 JS/CSS 文件名都会变化,确保更新无缝。

5.3 安全响应头:抵御常见 Web 攻击

在server块中添加以下头信息,提升安全性:

# 在 server {} 块内,添加 add_header X-Frame-Options "DENY" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-src 'none';" always;
  • X-Frame-Options: DENY防止网站被嵌入 iframe(防点击劫持)。
  • X-Content-Type-Options: nosniff阻止浏览器 MIME 类型嗅探,防止 XSS。
  • Content-Security-Policy是最强防线,限制脚本、样式、图片等资源只能从自身域名加载。其中'unsafe-inline'和'unsafe-eval'是 Vue 模板编译所必需的,生产环境可进一步收紧。

5.4 自动化部署脚本:告别重复劳动

手动上传、修改权限、重启 Nginx 极易出错。编写一个deploy.sh脚本,实现一键部署:

#!/bin/bash # deploy.sh - 若依Vue前端自动化部署脚本 # 使用前:chmod +x deploy.sh && ./deploy.sh SERVER_IP="your_server_ip" FRONTEND_DIR="/var/www/ruoyi-front" BACKUP_DIR="/var/www/ruoyi-front-backup-$(date +%Y%m%d-%H%M%S)" echo "=== 开始部署若依Vue前端 ===" # 1. 备份当前目录 echo "1. 备份当前文件..." sudo cp -r "$FRONTEND_DIR" "$BACKUP_DIR" # 2. 删除旧文件 echo "2. 清理旧文件..." sudo rm -rf "$FRONTEND_DIR"/* sudo mkdir -p "$FRONTEND_DIR" # 3. 上传新构建包(假设本地 dist-ruoyi/ 在当前目录) echo "3. 上传新构建包..." scp -r dist-ruoyi/* "root@$SERVER_IP:$FRONTEND_DIR/" # 4. 修复权限 echo "4. 修复文件权限..." ssh "root@$SERVER_IP" "chown -R nginx:nginx $FRONTEND_DIR && chmod -R 755 $FRONTEND_DIR" # 5. 重启 Nginx echo "5. 重启 Nginx..." ssh "root@$SERVER_IP" "systemctl restart nginx" echo "=== 部署完成! ===" echo "备份路径:$BACKUP_DIR" echo "访问地址:https://www.example.com/ruoyi/"

将此脚本放在项目根目录,每次构建后执行./deploy.sh,即可完成全部部署动作。脚本中的BACKUP_DIR命名包含时间戳,确保每次备份唯一,方便回滚。

我的个人体会是:部署脚本的价值,远不止于节省几分钟时间。它消除了人为操作的不确定性,让“上线”这件事变得可预测、可重复、可审计。在某次紧急修复中,我因一个字符的权限命令输错,导致服务中断15分钟。从此,所有部署操作都交给了脚本。

6. 常见问题速查表:从“页面空白”到“登录失效”的秒级定位

最后,整理一份高频问题速查表。当你遇到问题时,无需通读全文,直接对照表格,按步骤执行,90% 的问题能在 5 分钟内定位。

现象可能原因快速验证命令解决方案
页面完全空白(白屏)index.html加载成功,但 JS/CSS 404curl -I https://www.example.com/ruoyi/js/app.xxx.js检查publicPath是否与location的alias路径匹配;检查alias目录权限(chown nginx:nginx)
登录页显示,但输入账号密码后无反应login接口返回 404 或 502curl -I -X POST https://www.example.com/prod-api/login检查 Nginxlocation /prod-api/配置;检查后端是否运行;检查后端server.servlet.context-path
登录成功,但跳转到https://www.example.com/(根路径)而非https://www.example.com/ruoyi/前端路由base配置错误查看index.html源码,搜索<base href=检查vue.config.js中publicPath是否为/ruoyi/;确保构建时使用npm run build(非serve)
登录后刷新页面,提示“未登录”或跳回登录页AuthorizationCookie 未携带或无效浏览器Application > Cookies,检查Authorization字段检查后端CorsConfiguration是否允许withCredentials;检查 Nginxproxy_cookie_path是否正确(通常无需配置)
Nginx 启动失败,报nginx: [emerg] unknown directive "location"配置文件语法错误,如缺少;或{}不匹配sudo nginx -t运行sudo nginx -t检查语法,根据错误提示行号修正配置
curl能访问,但浏览器打不开,提示“连接被拒绝”服务器防火墙未放行 80/443 端口sudo firewall-cmd --list-portssudo firewall-cmd --permanent --add-port=80/tcp&&sudo firewall-cmd --permanent --add-port=443/tcp&&sudo firewall-cmd --reload

这张表是我过去三年中,从数百次部署实践中提炼出的精华。它不追求理论完备,只聚焦于“此刻我该怎么办”。记住,所有复杂问题,拆解到最后,都是路径、权限、配置这三件事的排列组合。当你感到迷茫时,回到这三个原点,逐一核对,答案自然浮现。

部署若依 Vue,本质上是一场与环境的对话。你写的每一行配置,都是在向服务器、向浏览器、向网络协议发出明确的指令。理解这些指令背后的契约,比记住命令本身重要百倍。当你能从容应对白屏、404、跨域,你就已经跨越了从“会用”到“懂行”的分水岭。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 11:26:27

美发美容店会员管理系统开发与实战应用

1. 项目概述在美发美容行业经营了十几年&#xff0c;我见过太多同行因为会员管理混乱而流失客户。记得2015年我刚开店时&#xff0c;还在用纸质笔记本记录会员信息&#xff0c;经常出现积分算错、预约冲突的情况。直到后来自己开发了一套会员管理系统&#xff0c;才真正解决了这…

作者头像 李华
网站建设 2026/10/15 11:26:17

长安链从零到一部署:证书、配置与节点启动全攻略

简介&#xff1a;这是一份面向区块链开发与运维人员的长安链部署实战手册&#xff0c;定位于帮助读者从零开始完成长安链区块链系统的环境搭建与源码部署。内容围绕直播回顾“如何通过长安链快速部署区块链系统”展开&#xff0c;覆盖Git、Golang、Docker、GLIBC_2.18等环境依赖…

作者头像 李华
网站建设 2026/10/15 11:26:06

React Native集成鸿蒙开发实战:原生组件桥接与踩坑指南

做React Native&#xff08;RN&#xff09;的开发者&#xff0c;这两年大概率会越来越多地听到一个话题&#xff1a;如何在RN项目里去开发鸿蒙&#xff08;HarmonyOS&#xff09;组件。鸿蒙是一款面向全场景的分布式操作系统&#xff0c;现在已经铺到手机、平板、车机、智能家居…

作者头像 李华
网站建设 2026/10/15 11:25:13

Superpowers:AI编程工作流的上下文协议层与CLI协同系统

1. 项目概述&#xff1a;Superpowers 不是超能力&#xff0c;而是开发者工作流的“神经增强系统”你最近在技术社区、GitHub Trending 或 Discord 开发者频道里&#xff0c;大概率已经反复刷到superpowers这个词——它不像传统工具名那样直白&#xff08;比如 VS Code、Git、Do…

作者头像 李华