nginx server_tokens off
和 proxy_hide_header
都是用于隐藏服务器信息的配置,但作用对象、范围和效果有本质区别,具体如下:
一、server_tokens off
的功能
server_tokens
是 Nginx 自身的核心配置,用于控制 Nginx 服务器在响应头和错误页面中是否显示版本信息。
- 默认行为 :
server_tokens on
(默认值)时,Nginx 会在Server
响应头和错误页面(如 404 页面)中显示具体版本,例如:- 响应头:
Server: nginx/1.24.0
- 错误页面底部:
nginx/1.24.0
- 响应头:
server_tokens off
的效果 :- 隐藏版本号,
Server
头仅显示Server: nginx
(不显示具体版本如1.24.0
)。 - 错误页面不再显示版本号。
- 隐藏版本号,
二、proxy_hide_header
的功能
proxy_hide_header
是 Nginx 作为反向代理时的配置,用于 隐藏后端上游服务(如 Tomcat、Jenkins、PHP-FPM 等)返回的响应头。
- 作用对象:仅针对通过
proxy_pass
代理的后端服务返回的响应头(不影响 Nginx 自身生成的头)。 - 示例:若后端 Tomcat 返回
X-Powered-By: Servlet/3.1
,配置proxy_hide_header X-Powered-By;
后,客户端将看不到该头。
三、核心区别
维度 | server_tokens off |
proxy_hide_header |
---|---|---|
作用对象 | Nginx 服务器自身生成的信息(Server 头、错误页面版本) |
后端上游服务(如 Tomcat、Jenkins)返回的响应头 |
控制范围 | 仅 Nginx 自身的标识信息 | 仅代理场景下后端服务的响应头 |
典型用途 | 隐藏 Nginx 版本号(减少针对特定版本漏洞的攻击) | 隐藏后端技术栈(如 X-Powered-By: PHP/7.4 ) |
是否依赖代理 | 不依赖(无论是否作为代理,都生效) | 依赖(仅在 proxy_pass 代理场景下生效) |
能否完全删除头 | 不能(Server: nginx 仍会存在,仅隐藏版本) |
能(可完全删除后端返回的指定头) |
四、总结
- 若想隐藏 Nginx 自身的版本信息(如避免暴露
nginx/1.24.0
),用server_tokens off
。 - 若想隐藏后端服务的技术栈信息(如避免暴露
X-Powered-By: Java/11
),用proxy_hide_header
。
两者常配合使用,共同减少服务器信息泄露,提升安全性(例如:server_tokens off
隐藏 Nginx 版本 + proxy_hide_header Server;
隐藏后端服务器的 Server
头)。