症状
应用中存在的路径却返回 404,常常只在生产环境出现。客户端路由在刷新时经常 404,因为服务器找不到对应文件。
诊断
对比并在源站测试:
curl -I https://app.example.com/settings # through proxy
curl -I http://127.0.0.1:3000/settings # origin
若源站成功而代理 404,则问题出在代理的路径处理。
修复
加入保留 API 路由的 SPA 回退:
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://backend;
}
规范结尾斜杠并严格匹配大小写。
验证
直接请求该失败路径并在刷新后再次请求;两者都返回页面,源站访问日志显示由预期路由处理。