proxy_set_header 仅设置发往后端的请求头,不能隐藏响应头;需用 server_tokens off、proxy_hide_header 或 headers-more 模块(如 more_clear_headers)来隐藏或清除 Server、X-Powered-By 等敏感响应头。

在 Nginx 中,proxy_set_header 本身不能直接“隐藏”响应头(比如后端返回的 Server、X-Powered-By 等敏感版本标头),它只负责设置**发往后端的请求头**。真正控制响应头是否返回给客户端的,是 proxy_hide_header 和 underscores_in_headers 等指令,以及对 Nginx 自身输出头的控制(如 server_tokens)。
关闭 Nginx 自身的 Server 版本标识
防止 Nginx 主动暴露自身版本:
- 在
http或server块中添加:
server_tokens off; - 这会让
Server响应头从Server: nginx/1.22.1变为Server: nginx,或完全不发送(取决于编译选项和版本);若需彻底移除,还需配合more_clear_headers(需安装 headers-more 模块)
隐藏后端返回的敏感响应头(如 X-Powered-By、Server、X-AspNet-Version)
使用 proxy_hide_header 显式屏蔽后端注入的响应头:
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
- 在
location或server块中添加:
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
proxy_hide_header X-AspNet-Version;
proxy_hide_header X-AspNetMvc-Version; - 注意:
proxy_hide_header仅影响代理响应中的响应头,不影响 Nginx 自己生成的头(如Date、Content-Type) - 该指令不支持正则或通配符,必须逐个写明要隐藏的头名
可选:用 headers-more 模块彻底清除或重写响应头
若需更精细控制(如删除所有 X- 开头的自定义头,或强制设空 Server),建议启用 headers-more-nginx-module:
- 安装后可使用:
more_clear_headers 'Server' 'X-Powered-By';
或
more_set_headers 'Server: '; (设为空字符串可覆盖原值) - 部分发行版(如 Ubuntu 的
nginx-extras)已预编译包含该模块;否则需源码编译时添加
补充:避免 proxy_set_header 误传敏感信息
虽然 proxy_set_header 不处理响应头,但错误配置可能把客户端不该传的信息透传给后端(如原始 User-Agent 暴露前端架构):
- 谨慎覆盖默认头,例如:
proxy_set_header User-Agent "nginx-proxy"; 可降低后端指纹泄露风险 - 禁用未声明头透传(防客户端伪造):
underscores_in_headers off;(默认即 off,建议显式声明) - 不要写
proxy_set_header Server ""—— 这无效,Server是响应头,不是请求头

















