单页应用刷新404是因Nginx将前端路由误作文件路径查找;需在location /中配置try_files $uri $uri/ /index.html,并为/api/单独设proxy_pass,HTML禁缓存、静态资源长效缓存。

单页应用(SPA)刷新后出现 404,根本不是前端写错了,而是 Nginx 把路由当成了真实文件路径去查——比如请求 /user/profile,它真去磁盘找这个目录或文件,当然找不到。
核心配置:用 try_files 接管所有非资源请求
必须在 location / 块中加入这行,并确保 root 和 index 已正确定义:
try_files $uri $uri/ /index.html;
它的执行顺序很关键:
-
$uri:先查真实文件,如/js/app.js、/logo.png -
$uri/:再查是否为真实目录,如/assets/,并尝试加载其索引页 -
/index.html:以上都失败,就返回入口 HTML,由前端路由接管 URL 解析
区分处理 API 请求,避免被兜底
如果后端接口和前端同域(比如都走 /api/),得单独声明 location,否则 try_files 会把 /api/login 也拉去 index.html:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
立即学习“前端免费学习笔记(深入)”;
- 写一个
location /api/ { proxy_pass http://backend/; }块 - 放在
location /之前或同级——Nginx 按最长前缀匹配,/api/优先于/
静态资源缓存与 HTML 不缓存要分开设
加了 try_files 后,浏览器若缓存了旧版 index.html,新路由可能白屏或报错:
- 给 HTML 强制不缓存:
add_header Cache-Control "no-cache, no-store, must-revalidate"; - JS/CSS/图片等用内容哈希命名(如
app.a1b2c3.js),再配长期缓存:expires 1y;
验证是否生效的小技巧
改完配置别急着 reload,先快速检查两件事:
- 运行
nginx -t确保语法无误 - 用
curl -I http://localhost/random-path测试:状态码应为200,Content-Type是text/html,且响应体是index.html的内容


















