You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx部署站点刷新页面报404 Cannot GET /login错误如何修复

问题原因

这是单页应用(SPA)使用History路由模式的典型故障:

  • 首次访问根路径/时,Nginx正常返回打包后的index.html,前端资源加载完成后,跳转/login的动作由浏览器端JS控制,不会向服务端发起对应路径的页面请求,因此功能正常。
  • 刷新/login页面时,浏览器直接向Nginx发起/login的GET请求,当前配置的规则是:在dist静态资源目录找不到对应物理文件时,就把请求转发到9900端口的后端服务。后端没有定义/login的GET处理接口,直接返回了404格式的JSON错误。
修复方案

调整Nginx路由规则,前端路由类请求直接返回index.html交由前端路由接管渲染,不要将这类请求转发给后端。
如果后端接口有统一前缀(比如所有接口路径以/api开头),使用拆分配置最稳妥,修改后的完整配置如下:

server {
  listen 8080 ssl;

  ssl_certificate         /etc/letsencrypt/live/my-site.com/fullchain.pem;
  ssl_certificate_key     /etc/letsencrypt/live/my-site.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/my-site.com/chain.pem;

  error_page 497 301 =307 https://my-site.com:8080$request_uri;

  server_name my-site.com;

  root /home/username/apps/project/client/dist;
  index index.html;

  # 单独代理后端接口请求
  location /api {
     proxy_pass https://127.0.0.1:9900;
     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;
  }

  location / {
    # 静态资源不存在时返回index.html,由前端路由处理路径
    try_files $uri $uri/ /index.html;
    error_page 405 =200 /index.html;
  }
}

如果后端接口暂时没有做统一前缀,无法和前端路由路径拆分,建议先给接口增加统一前缀再按上述配置部署,避免前端路由和后端接口路径冲突。

配置修改完成后,依次执行以下命令验证并重载Nginx让配置生效:

# 验证配置语法正确性
nginx -t
# 重载Nginx配置
nginx -s reload

内容的提问来源于stack exchange,提问作者user19459365

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:57:22