proxy_hide_header 是响应头黑名单过滤器,仅屏蔽后端返回的指定响应头(如Server、X-Powered-By),必须置于proxy_pass之后、location块内逐行配置,并需配合server_tokens off和proxy_set_header Server "";才能彻底隐藏敏感信息。

proxy_hide_header 是 Nginx 作为反向代理时,用于屏蔽后端服务器响应头中某些字段的指令。它不会修改或重写响应头,而是直接从转发给客户端的响应中移除指定的 Header 字段,常用于隐藏后端服务类型、版本、内部路径等敏感信息。
哪些响应头可以被隐藏
该指令只能隐藏后端(upstream)返回的响应头,不能隐藏 Nginx 自己添加的头(如 Server、Date 等)。常见需隐藏的字段包括:
-
Server(后端 Web 服务器标识,如nginx/1.20.1或Apache/2.4.52) -
X-Powered-By(如PHP/8.1.0、Express) -
X-AspNet-Version(ASP.NET 应用) X-AspNetMvc-Version-
X-Backend-Server(自定义内部标识)
基本语法与位置
必须放在 location 或 server 块中,且仅在启用代理(proxy_pass)时生效:
location / {
proxy_pass https://backend;
proxy_hide_header Server;
proxy_hide_header X-Powered-By;
}
注意:每行只能隐藏一个 Header;重复使用该指令可隐藏多个字段。
配合 proxy_set_header 实现更彻底的隐藏
单独使用 proxy_hide_header 不会阻止 Nginx 自己输出 Server 头(默认值为 nginx)。若要完全隐藏,还需:
- 关闭 Nginx 自带的
Server头:server_tokens off;(放在http或server块) - 覆盖或清除其他可能泄露的头:
proxy_set_header Server "";(部分版本支持清空,但更可靠方式是结合more_clear_headers模块或 OpenResty) - 确保没有其他模块(如 Lua 脚本)重新注入敏感头
验证是否生效
部署后可用 curl 检查响应头:
curl -I https://your-domain.com
观察输出中是否还包含被隐藏的字段。注意:浏览器开发者工具的 Network 面板有时会缓存预检请求或忽略某些头,建议以命令行结果为准。如果仍能看到目标 Header,检查:
- 配置是否在正确的
location块内,且该 location 确实匹配请求路径 - 后端是否在响应体中硬编码了类似信息(Header 隐藏不影响响应体内容)
- Nginx 是否已重载:
nginx -s reload


















