nginx 中用 proxy_redirect 重写后端返回的 location 头,将内网地址(如 http://192.168.1.100:8080/)替换为 $scheme://$host/;需配合 proxy_set_header 设置 host、x-forwarded-proto 等头,确保后端生成正确跳转地址。

直接在 Nginx 的 location 块中配置 proxy_redirect,把后端返回的内网地址(比如 http://192.168.1.100:8080/)替换成用户实际访问的公网协议+域名(如 $scheme://$host/),就能让浏览器跳转到正确地址。
先确认后端到底返回了什么 Location
别猜,用 curl -I 看真实响应头:
curl -I https://your-domain.com/login- 重点检查返回的
Location:行,看它是绝对 URL(含http://192.168.x.x或http://localhost)还是相对路径(如/dashboard) - 如果返回的是
Location: http://10.0.2.5:3000/callback,就说明必须重写协议+IP+端口
针对内网 IP 和端口的典型配置
假设后端运行在 192.168.1.100:8080,用户通过 https://example.com 访问:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 基础写法(推荐):
proxy_redirect http://192.168.1.100:8080/ $scheme://$host/; - 更通用的正则写法(适配多种容器 IP):
proxy_redirect ~^http://[^/]+(?::\d+)?(/.*)?$ $scheme://$host$1; - 若只改协议不关心具体 IP(后端已返回正确路径):
proxy_redirect http:// $scheme://;
必须同步设置的关键请求头
光靠 proxy_redirect 是临时补救;让后端自己生成正确地址,才能一劳永逸:
-
proxy_set_header Host $host;—— 防止后端误用localhost或内网名 -
proxy_set_header X-Forwarded-Proto $scheme;—— 告诉后端当前是 HTTP 还是 HTTPS,避免协议降级 -
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For $proxy_add_x_forwarded_for;—— 辅助后端记录真实来源
子路径代理时的路径前缀修正
比如 location /admin/ { proxy_pass http://backend/; },后端返回 Location: /login,用户需要跳到 /admin/login:
- 写成:
proxy_redirect / /admin/; - 注意:两个斜杠都代表“以 / 开头的路径”,Nginx 会把
/login→/admin/login - 如果
proxy_pass末尾没加/(如proxy_pass http://backend;),后端可能收到完整路径/admin/login,此时规则要相应调整










