前端 history 路由,首页能开,直接刷新 /user/42 返回 404,静态服务器日志里找的是 /user/42 这个文件。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,try_files 最后一项写成了 =404,文件不存在就直接返回。SPA 需要把未命中的路径交给 index.html,由前端路由接管。

碰到「try_files 前端路由」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。

location / {
  try_files $uri $uri/ /index.html;
}
location /api/ {
  proxy_pass http://api_backend;
}

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,把最后一项改成 /index.html 确保它落在同一个 root 下;/api 和 /assets 单独用 location 排除 不要被兜底规则接走;确认 root 指向打包产物目录 不是项目源码目录;刷新深层路由和带查询串的地址各测一次。

最后用这个标准收尾,刷新 /user/42 返回 200 页面内容由前端路由渲染 接口请求仍走 /api。

作者 9823189