nginx反向代理需显式配置三项基础头部:host头用proxy_set_header host $http_host;透传,x-real-ip和x-forwarded-for记录真实客户端ip,x-forwarded-proto与x-forwarded-port标识协议及端口。

在 Nginx 中配置反向代理的头部转换规则,核心是控制请求头(Request Headers)如何从客户端传递到后端服务,并按需修改、添加或屏蔽特定字段。这不是简单地“转发”,而是有意识地重构请求上下文,让后端能准确识别真实来源、协议类型、客户端 IP 等关键信息。
必须设置的三项基础头部透传
默认情况下,Nginx 不会原样转发 Host、客户端 IP 等关键头,必须显式配置:
-
Host 头透传:用
proxy_set_header Host $host;或更严谨的proxy_set_header Host $http_host;(保留原始端口和大小写)。若后端依赖 Host 做虚拟主机路由,漏掉这行会导致 404 或错误站点响应。 -
真实客户端 IP 记录:用
proxy_set_header X-Real-IP $remote_addr;设置最外层真实 IP;再加proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;实现多级代理链路追加(如 CDN → Nginx → 后端)。 -
协议与安全标识:添加
proxy_set_header X-Forwarded-Proto $scheme;和proxy_set_header X-Forwarded-Port $server_port;,让后端知道请求原本是 HTTP 还是 HTTPS,避免重定向死循环或混合内容警告。
按需覆盖或注入自定义请求头
可通过 proxy_set_header 覆盖已有头,或注入新头供后端鉴权、灰度、日志等使用:
- 强制指定 Host:例如后端只认
api.internal,可写proxy_set_header Host api.internal; - 添加认证上下文:
proxy_set_header X-Proxy-Auth "nginx-gateway"; - 透传原始 User-Agent 但去噪:
proxy_set_header X-Original-UA $http_user_agent; - 禁用某些头(如防止后端误读):
proxy_set_header Accept-Encoding "";(置空即不发送)
控制响应头的过滤与放行
Nginx 默认屏蔽部分响应头(如 Server、X-Powered-By),也可主动干预:
- 隐藏后端指纹:
proxy_hide_header Server;、proxy_hide_header X-Powered-By; - 允许放行本被屏蔽的头:
proxy_pass_header X-Accel-Redirect;(常用于内部重定向) - 重写响应头:
proxy_set_header只作用于请求头;如需改响应头,要用add_header(仅对 2xx/3xx 生效)或第三方模块如headers-more-nginx-module
注意路径与 Host 写法的细节差异
头部行为受 proxy_pass 的 URL 结尾斜杠影响,间接改变 Host 解析逻辑:
-
location /api/ { proxy_pass http://backend/; }→ 请求发往http://backend/users,Host 设为backend -
location /api/ { proxy_pass http://backend; }→ 请求发往http://backend/api/users,Host 仍为$host,但后端收到的路径含/api - 若需保持原始 Host 并精确控制路径,推荐搭配
rewrite ^/api/(.*)$ /$1 break;配合proxy_pass http://backend;











