隐藏 Nginx 版本号需在 http 块中配置 server_tokens off;,可同时移除响应头 Server 字段及错误页中的版本信息;反向代理时须用 proxy_hide_header server; 过滤上游版本头,并建议关闭 PHP 的 expose_php、自定义错误页以增强安全性。

隐藏 Nginx 的服务器版本号和签名信息,核心就一条:在 http 块 中启用 server_tokens off;。它能同时抹掉响应头里的 Server: nginx/x.y.z 和默认错误页 HTML 源码中的版本字符串。但这只是起点,真正安全需要覆盖内容层与协议层两个维度。
只改一处:必须写在 http 块里
这个指令只在 http { } 作用域下生效。写在 server 或 location 块中完全无效,也不会覆盖全局行为。Nginx 不支持按站点单独开关版本号显示。
- 打开主配置文件:
/etc/nginx/nginx.conf(通用)或/www/server/nginx/conf/nginx.conf(宝塔) - 找到
http {开头的位置,在其大括号内、与include mime.types;同级处添加一行:server_tokens off; - 删掉其他地方(如站点配置、server 块内)重复写的
server_tokens行,避免冲突 - 分号不能漏,也不能写成
server_tokens = off或加引号
双重验证:别只看响应头
重载后必须从两个地方确认效果,缺一不可:
- 用命令查响应头:
curl -I https://your-domain.com | grep Server,应只看到Server: nginx或该字段完全不出现 - 访问一个不存在的路径(如
/nonexistent),查看返回的 HTML 源码,确认里面没有nginx/字样、操作系统名或构建时间等敏感信息
反向代理场景:后端版本也要拦住
如果 Nginx 做反向代理,上游服务(如 Apache、Tomcat、PHP-FPM)可能自己返回带版本的 Server 头,server_tokens off 对它完全无效。
- 在对应
location或server块中添加:proxy_hide_header server; - 顺手过滤其他常见泄露头:
proxy_hide_header x-powered-by;、proxy_hide_header x-aspnet-version;、proxy_hide_header x-runtime; - 若后端是 PHP,还需在
php.ini中设expose_php = Off
进阶加固:自定义错误页与源码级隐藏
默认错误页(404/502 等)除了含版本号,还可能暴露系统类型、编译参数等。更稳妥的做法是替换为纯静态页面:
- 创建简洁的
/usr/share/nginx/html/error.html,不包含任何服务器标识 - 在
http或server块中添加:error_page 404 /error.html;、error_page 502 503 504 /error.html; - 如需彻底抹除
Server字段(连nginx都不显示),需修改源码:ngx_http_header_filter_module.c中将"server: nginx"替换为空字符串,再重新编译安装


















