Nginx + Vue History 模式刷新 404 的完整排查与解决方案

一、问题背景

在部署前后端分离项目时,常见架构如下:

  • 前端:Vue 3(使用 createWebHistory,History 模式路由)

  • 后端:Spring Boot

  • 网关:Nginx

部署完成后,发现一个非常诡异的问题:

👉 页面内部跳转一切正常,但只要在浏览器地址栏刷新,就直接 404。

例如访问:http://ip:port/finance-record

  • 首次从首页点击跳转 → 正常显示

  • 浏览器刷新 → 404 Not Found

二、问题复现

现象:

操作 结果
/finance-record 页面内跳转 正常
直接访问 /finance-record 404
刷新 /finance-record 404

三、问题根因分析

1️⃣ Vue History 模式的本质

History 模式下:

  • /finance-record 只是前端路由

  • 服务器实际上并不存在 /finance-record 这个文件

👉 所以:服务器必须把所有非静态资源请求回退到 index.html,交给前端路由处理。

2️⃣ 刷新时发生了什么?

浏览器刷新 /finance-record 时:

  1. 请求直接发送给 Nginx

  2. Nginx 尝试寻找文件:/path/frontend/dist/finance-record

  3. 文件不存在 → 返回 404

3️⃣ 原因总结

  • 服务器未对根路径 / 设置 SPA fallback

  • 仅对某个子路径配置了 try_files

  • 实际访问路径并未命中 fallback 规则

四、最终解决方案

👉 给根路径 / 增加统一的 SPA 回退规则。


五、正确的 Nginx 配置

XML 复制代码
server {
    #你的端口
    listen  port;
    #你的ip或域名
    server_name ip;

    # API 反向代理
    location ^~ /api/ {
        proxy_pass http://127.0.0.1:backend_port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 前端 SPA
    root /path/to/your/frontend/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # 禁止访问隐藏文件
    location ~ /\.(git|env|htaccess) {
        deny all;
    }
}

原配置:

调整后的配置:

六、配置说明

配置 作用
try_files $uri $uri/ /index.html 所有非静态文件请求回退给前端
root + index 指定前端构建输出目录
/api/ 代理

七、验证方式

1️⃣ 刷新 /finance-record → 不再 404

2️⃣ 访问 /assets/app.js → 正常返回

3️⃣ 调用 /api/calc → 正常代理

八、总结

Vue History 模式刷新 404 的根因不是 Vue,也不是浏览器,而是服务器不知道如何处理前端路由。

只要在 Nginx 层对根路径统一 fallback 到 index.html,问题即可彻底解决。

也可以这么说:

刷新 404 = 服务器找不到前端路由 → 用 try_files 回退给 index.html 即可

相关推荐
风曦Kisaki21 分钟前
# Linux Shell 编程入门 Day02:条件测试、if 判断、循环与随机数
linux·运维·chrome
木雷坞29 分钟前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器
郝亚军30 分钟前
ubuntu 22.04如何安装libmodbus
运维·服务器·ubuntu
李日灐35 分钟前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
JZC_xiaozhong1 小时前
跨系统审批自动化怎么做?从采购到销售合同的完整方案
大数据·运维·自动化·流程自动化·数据集成与应用集成·业务流程管理·异构数据集成
计算机安禾1 小时前
【Linux从入门到精通】第34篇:搭建FTP与Samba——跨平台文件共享解决方案
linux·运维·服务器
薯老板1 小时前
vue组件之间的通信
前端·vue.js
信徒_2 小时前
负载均衡技术选型
运维·负载均衡
计算机安禾2 小时前
【Linux从入门到精通】第32篇:Nginx入门——高性能Web服务器搭建
linux·服务器·nginx
动恰客流管家2 小时前
动恰3DV3丨客流统计系统:旺季人手不够淡季闲人太多?客流统计帮你科学优化人力成本
大数据·运维·人工智能·3d