应配置 absolute_redirect off:在 server 块中设置 absolute_redirect off 可使 return 或 rewrite 生成的重定向返回相对路径(如 /login),由浏览器自动补全当前协议、域名和端口,避免暴露内网非标端口、跳转失败或同源策略问题。

在 Nginx 的 server 块中设置 absolute_redirect off,是为了让重定向响应头中的 Location 字段输出相对路径(如 /login),而不是自动拼接协议、域名和端口生成绝对 URL(如 http://example.com:8080/login)。这在反向代理、非标端口部署或 CDN 场景下尤为关键,能避免暴露内网端口、跳转失败或同源策略问题。
为什么需要关闭 absolute_redirect
当 Nginx 运行在 8080、8000 等非标准端口,而用户实际通过 80/443 访问时,默认的绝对重定向会把内部端口带入 Location 响应头。浏览器按此跳转就会访问错误地址。关闭后,Nginx 不再主动补全完整 URL,而是交由浏览器基于当前页面上下文(协议、域名、端口)自动解析相对路径。
正确配置方式
- 将
absolute_redirect off;放在server块内,作用范围覆盖该虚拟主机下的所有return和rewrite ... redirect指令 - 必须确保
server_name正确匹配请求 Host 头,否则配置可能不生效(例如写server_name example.com;,而非留空或错配) - 推荐同步添加
port_in_redirect off;,进一步防止某些内部重定向逻辑中意外插入端口 - 无需修改
server_name_in_redirect,默认off即可(此时使用请求中的 Host 头,更符合代理场景)
典型配置示例
以下配置适用于前端通过 HTTPS 443 入口、后端 Nginx 监听 8080 的常见代理架构:
server {listen 8080;
server_name example.com;
absolute_redirect off;
port_in_redirect off;
location /auth {
return 302 /login;
}
location /old {
rewrite ^/old(.*)$ $1 redirect;
}
}
验证是否生效
用 curl -I 测试触发重定向的请求,观察响应头:
- 成功:返回
Location: /login(只有路径,无协议、无域名、无端口) - 失败:若仍看到
Location: http://example.com:8080/login,需检查server_name是否匹配、配置是否加载到实际生效的server块、是否执行了nginx -s reload











