必须在 http 块中配置 server_tokens off; 才能全局隐藏 nginx 版本号,使响应头仅显示 server: nginx、错误页不出现版本信息;写在 server 或 location 块无效,还需删除重复配置、nginx -t 验证后 reload,并同步关闭 php、cdn 等关联泄露点。

在 Nginx 的 server 块中无法直接隐藏服务器版本号,必须在 http 块(全局)或 server 块的上级作用域中配置。但你可以通过组合设置,在特定虚拟主机层面实现更精细的标识控制。
关闭 server_tokens 防止暴露版本号
server_tokens 是控制是否在响应头(如 Server)和错误页面中显示 Nginx 版本的关键指令。它只在 http、server 或 location 块中生效,但推荐在 http 块中统一关闭,否则部分场景(如 404 错误页)仍可能泄露版本:
- 在
/etc/nginx/nginx.conf的http块内添加:
server_tokens off; - 若仅想对某个
server块禁用(不推荐),可写在该块内,但需确保所有子location不覆盖它 - 注意:设为
off后,Server响应头仍显示nginx,只是不带版本(如nginx而非nginx/1.24.0)
用 server_name_in_redirect 配合自定义 header 替换 Server 字段
Nginx 本身不支持直接修改 Server 响应头(出于安全限制),但可通过第三方模块或反向代理方式隐藏。若不能编译安装 headers-more-nginx-module,可借助以下兼容方案:
- 启用
underscores_in_headers on;(非必需,但便于调试) - 使用
more_set_headers "Server: myapp";(需安装headers-more模块) - 若未安装该模块,可在上游服务(如 Node.js、Python Flask)中主动设置
Server头,Nginx 默认会透传而非覆盖 - 确认 Nginx 不会因开启
proxy_hide_header Server而意外移除你期望保留的标识
配合 error_page 自定义错误页,消除版本痕迹
默认错误页(如 404、502)会包含 Nginx 版本信息。即使 server_tokens off,静态错误页内容仍可能暴露线索:
- 在对应
server块中定义自定义错误页:
error_page 404 /404.html;
location = /404.html { internal; } - 确保
/404.html文件内容简洁,不含任何软件名或版本字样 - 对常见错误码(400、403、500、502、503、504)都做类似处理
- 测试时用
curl -I https://yoursite.com/nonexistent验证响应头与页面内容
验证是否生效的实用检查项
配置完成后务必逐项验证,避免遗漏:
- 重启 Nginx:
sudo nginx -t && sudo systemctl reload nginx - 检查响应头:
curl -I https://example.com | grep Server→ 应只显示nginx或你自定义的值 - 触发一个 404 请求,查看 HTML 源码是否含
nginx或版本字符串 - 用
curl -v https://example.com/badpath看完整响应,确认无意外暴露 - 注意:某些 CDN(如 Cloudflare)或 WAF 可能覆盖或添加
Server头,此时需在其后台设置











