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

同一系统内部调用Nginx返回301永久重定向错误问题求助

问题根因

  1. 配置规则与预期不符:你预期/api前缀的请求都转发到8090后端,但实际配置仅匹配/api/v1/开头的请求,访问/api路径时未命中对应代理规则,请求会被转发到前端8080服务,301跳转大概率由前端服务返回。
  2. 路径匹配规则缺失:即便调整前缀匹配规则后,如果访问路径不带末尾斜杠(如/api而非/api/),Nginx默认的路径标准化逻辑也可能返回301跳转补充斜杠。
  3. 容器解析异常:运行在9000端口的Docker容器如果无法正确将example.com解析到宿主机Nginx监听IP,也可能触发异常跳转。

修复步骤

  • 调整API路径匹配规则,替换原有的location /api/v1/配置块,匹配所有/api前缀的请求,注意需要将/api/v1/socketio/的配置块放在本规则之前,保证长路径优先匹配:
location ^~ /api/ {
    proxy_pass http://localhost:8090/;
    # 补充请求头避免后端服务识别异常
    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;
}

注意proxy_pass末尾的斜杠会自动将请求路径中的/api/前缀移除后转发到后端,如果你需要后端收到完整的/api/xxx路径,删掉末尾的斜杠即可。

  • 兼容无末尾斜杠的/api请求,新增精确匹配规则:
location = /api {
    # 方案1:跳转至带斜杠的路径(推荐)
    return 301 /api/;
    # 方案2:直接转发到后端
    # proxy_pass http://localhost:8090/;
}
  • 验证Docker容器域名解析:进入9000端口的容器执行curl -v https://example.com/api,查看301响应的Location头确认跳转来源。如果解析异常,容器运行时可添加--add-host=example.com:宿主机局域网IP参数修复。
  • 配置修改完成后执行nginx -t验证合法性,再执行nginx -s reload重载配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:45:10