需先用curl -I确认后端返回的Location值,再按绝对URL、正则匹配或相对路径类型配置proxy_redirect规则,并同步设置proxy_set_header Host、X-Forwarded-Proto等头确保后端生成正确跳转。

直接在对应 location 块里加 proxy_redirect 规则,把后端返回的内网或错误域名替换成你对外暴露的域名即可。关键不是“加指令”,而是匹配要改的原始 Location 值,并确保后端能生成合理跳转地址。
先确认后端实际返回的 Location 是什么
用 curl -I 查看真实响应头,避免凭空猜测:
curl -I https://your-domain.com/login- 重点看返回中有没有
Location:行,例如:Location: http://192.168.1.100:8080/dashboardLocation: https://backend.internal/auth/callbackLocation: /profile
按 Location 类型选对应写法
不同格式的 Location,配置方式不同:
-
绝对 URL(含协议+错误域名):如
Location: http://172.18.0.5:3000/login
→ 写成:proxy_redirect http://172.18.0.5:3000/ https://your-domain.com/; -
多个内网地址不确定时(推荐正则):
→proxy_redirect ~^https?://[^/]+(/.*)$ $scheme://your-domain.com$1;
(匹配任意协议+任意域名+端口,只保留路径并拼到你的域名下) -
相对路径但需补前缀(子路径代理常见):
比如location /app/ { proxy_pass http://backend/; },后端返回Location: /login,实际应跳/app/login
→proxy_redirect / /app/;
必须同步设置的 proxy_set_header
只改 Location 不够,后端若不知道用户真实访问方式,下次重定向还会错:
-
proxy_set_header Host $host;—— 让后端生成跳转时用你的域名,而不是 localhost -
proxy_set_header X-Forwarded-Proto $scheme;—— 告诉后端当前是 HTTP 还是 HTTPS,避免它硬写http:// -
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For $proxy_add_x_forwarded_for;—— 方便后端记录真实 IP
验证是否生效
改完配置后重载 Nginx,再用 curl -I 检查:
- 原始请求返回的
Location:应该变成你指定的域名,比如https://your-domain.com/dashboard - 如果没变,打开
error_log设为info级别,Nginx 会记录proxy_redirect是否匹配成功 - 注意:规则只对当前
location下的proxy_pass生效,别写到 server 块顶层


















