proxy_hide_header用于屏蔽后端响应头(如Server、X-Powered-By),须置于proxy_pass后的location块内逐行配置,并配合server_tokens off和add_header Server "Web-Proxy"才能彻底隐藏并统一标识。

在 Nginx 中配置反向代理时,隐藏后端真实服务特征(如 Server、X-Powered-By、X-AspNet-Version 等)是安全加固的常规操作。关键不是“禁止返回”,而是用 proxy_hide_header 屏蔽原始头,再用 add_header 或 proxy_set_header 主动设置中立或自定义值。
屏蔽敏感响应头
Nginx 默认不会透传所有后端响应头,但像 Server、X-Powered-By 这类常见头会被原样转发。需显式隐藏:
-
proxy_hide_header Server;—— 移除后端返回的Server字段(注意:这不等于设置自己的Server,仅删除) proxy_hide_header X-Powered-By;proxy_hide_header X-AspNet-Version;proxy_hide_header X-AspNetMvc-Version;
主动设置中立或自定义响应头
仅隐藏不够,攻击者可能通过空头或行为推断技术栈。建议统一输出可控标识:
-
server_tokens off;—— 全局关闭 Nginx 自身的Server: nginx/1.24.0(放在http或server块) -
add_header Server "Web-Proxy";—— 替换为无意义、统一的值(注意:add_header不会覆盖已存在的同名头,需配合proxy_hide_header使用) -
add_header X-Content-Type-Options "nosniff";、add_header X-Frame-Options "DENY";等可一并加入,增强整体头部安全性
注意响应头继承与作用域
这些指令必须放在 location 块内(即反向代理生效的位置),否则不作用于代理流量:
-
proxy_hide_header只对proxy_pass路径下的响应生效 -
add_header在location内才影响该路径返回的响应;若在server块,会对所有子路径生效(包括静态文件) - 避免在多个嵌套
location中重复设置,可能导致头被覆盖或遗漏
验证是否生效
配置完成后重载 Nginx(nginx -s reload),用 curl -I https://your-domain.com 检查响应头:
- 确认原始
X-Powered-By等已消失 - 确认
Server显示为你设定的值(如Web-Proxy),而非后端或默认 Nginx 版本 - 注意浏览器开发者工具的 Network 面板有时会缓存旧响应,建议用
curl或隐身窗口验证


















