最直接有效的做法是在 nginx.conf 的 http 块中添加 server_tokens off;,可全局隐藏响应头(如 Server: nginx/1.26.3 → Server: nginx)和默认错误页中的版本号,显著降低被漏洞扫描工具精准识别的风险;必须置于 http 块顶层,删除内层重复配置,经 nginx -t 验证后执行 systemctl reload nginx 生效,并需同步处理 CDN、后端服务及反向代理等关联泄露点。

最直接有效的做法是在 nginx.conf 的 http 块中添加 server_tokens off;,它能同时隐藏响应头中的版本号(如从 Server: nginx/1.26.3 变为 Server: nginx)和默认错误页(404、500 等)里的版本字符串,显著降低被漏洞扫描工具精准识别并攻击的风险。
必须放在 http 块顶层才生效
该指令只在 http { } 作用域内全局有效:
- 打开主配置文件(常见路径:
/etc/nginx/nginx.conf或宝塔环境下的/www/server/nginx/conf/nginx.conf) - 找到
http {开头的位置,在其后第一行附近添加:server_tokens off; - 删掉所有
server或location块里重复写的server_tokens on;,避免覆盖 - 确认分号不遗漏,也不加引号或等号(如
server_tokens = off是无效的)
改完要验证是否真隐藏了
仅写配置不生效,必须完成两步验证:
- 运行
nginx -t检查语法是否正确 - 执行
systemctl reload nginx(或nginx -s reload)重载配置 - 用
curl -I https://your-domain.com查看响应头,确认Server:后只显示nginx或已简化 - 访问一个不存在的路径(如
/nonexistent),检查返回的 HTML 错误页源码,确保没有nginx/字样
注意 CDN 和后端服务的干扰
server_tokens off 只管 Nginx 自身输出,其他环节仍可能泄露版本:
- 若使用 Cloudflare、阿里云 CDN 等,需在 CDN 后台关闭或重写
Server头,否则会覆盖 Nginx 设置 - PHP-FPM、Tomcat、Node.js 等后端服务也会在响应头中返回自己的版本,需各自配置隐藏(如 PHP 的
expose_php = Off) - 反向代理场景下,上游服务返回的
Server头可用proxy_hide_header Server;拦截(该指令需放在location或server块内)
进阶:彻底模糊或替换 Server 标识
如需更强指纹防护,可配合扩展模块或源码修改:
- 安装
headers-more-nginx-module后,在配置中加:more_set_headers 'Server: WebServer'; - 源码编译时修改
src/core/nginx.h中的NGINX_VER和NGINX_VERSION宏,可完全替换或清空标识(适合定制化部署,但升级维护成本高) - 不推荐完全删除
Server头,部分客户端或中间设备依赖该字段做协议兼容判断











