Nginx反向代理中需用proxy_set_header显式清空高危请求头;Authorization和Cookie必须设为""以阻断敏感凭证透传,X-Forwarded-For和X-Real-IP应禁用或仅设可信值,proxy_pass_request_headers off可彻底禁用透传但需手动补全必要头。

在 Nginx 反向代理中,proxy_pass 默认会把客户端请求头原样转发给后端。若不主动干预,像 Authorization、Cookie、X-Forwarded-For 这类头可能被后端误用,造成越权、信息泄露或 IP 伪造风险。关键不是“删除”,而是用 proxy_set_header 显式覆盖为空字符串,切断透传链路。
清除高危请求头(如 Authorization 和 Cookie)
这两类头最常携带敏感凭证,必须在 proxy_pass 前设置为空:
-
proxy_set_header Authorization "";—— 阻断 Bearer Token 或 Basic 认证凭据 -
proxy_set_header Cookie "";—— 防止后端读取用户会话信息 - 双引号不能省略,写成
""是语法必需;写成proxy_set_header Authorization;会报错 - 若需保留部分 Cookie(如 session ID),应改由后端统一鉴权,Nginx 层不建议条件性透传
控制 IP 类头避免源地址混淆
X-Forwarded-For 和 X-Real-IP 易被客户端篡改,直接透传会导致后端取到虚假 IP:
- 完全禁用伪造可能:
proxy_set_header X-Forwarded-For "";和proxy_set_header X-Real-IP ""; - 如需传递真实客户端 IP,只设一次且来源可信:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 避免在多个
location中重复设置同名头,防止后设指令覆盖前值
禁用全部请求头透传(谨慎启用)
当业务明确不需要任何原始请求头时,可用更彻底的方式:
- 关闭自动透传:
proxy_pass_request_headers off; - 此时必须手动补全后端必需的头,例如:
proxy_set_header Host $host;、proxy_set_header Content-Type $content_type; - 该方式适合网关级统一入口,但配置疏漏易导致后端 400 或 502 错误,上线前务必实测
验证是否生效
光写配置不验证等于没做:
- 用
curl -H "Authorization: Bearer abc123" http://your-proxy/发起测试,抓包查看 upstream 请求中该头是否为空 - 在后端日志中打印所有请求头,确认
Authorization和Cookie已不可见 - 调试时可临时加
add_header X-Debug-Authorization "$http_authorization";,通过响应头查看原始值(上线前务必移除)


















