在Nginx的http块中配置server_tokens off可全局隐藏所有响应(含静态资源及错误页)中的版本号,防范版本扫描;需确保无内层覆盖,验证后重载生效。

直接在 Nginx 的 http 块中配置 server_tokens off; 即可移除所有响应(包括静态资源)中的版本号,这是防范基于版本漏洞的定向扫描最基础也最关键的一步。
必须放在 http 块里才全局生效
该指令只在 http 上下文中才能覆盖全部请求。如果写在 server 或 location 块里,对部分静态资源(尤其是被其他 server 块或默认配置接管的请求)可能无效。
- 打开主配置文件,如
/etc/nginx/nginx.conf或宝塔等面板中的全局配置入口 - 定位到
http { ... }区域,在其中任意位置添加一行:server_tokens off; - 确保没有同名指令在更内层(如某个 server 块)中被设为
on,否则会覆盖掉
静态资源响应头和错误页都会同步隐藏
启用后,不只是 GET /logo.png 这类请求的 Server: nginx/1.24.0 会变成 Server: nginx,连带 404、502 等错误页面的 HTML 源码里也不会再出现版本字样。
- 无需单独为
location ~ \.(js|css|png)$块重复设置 - 但如果你用了自定义错误页(
error_page 404 /404.html),要检查 HTML 文件里是否硬编码了nginx/xxx—— 那样仍会泄露
验证是否真正生效
改完配置别急着重启,先做两步确认:
- 运行
sudo nginx -t检查语法是否正确 - 重载服务:
sudo systemctl reload nginx(比 restart 更轻量) - 用 curl 测试任意静态资源:
curl -I https://yoursite.com/favicon.ico,观察响应头中Server字段是否只剩nginx
进阶:彻底移除或伪装 Server 头(可选)
server_tokens off 只能删版本号,不能删 Server: nginx 这个标识本身。若需更强混淆,得借助第三方模块:
- 安装
headers-more-nginx-module后,可用more_clear_headers "Server";彻底删除该头 - 或用
more_set_headers "Server: Apache";伪造成其他服务器(注意兼容性风险) - 纯删除需重新编译 Nginx 并修改源码中的
NGINX_VER宏定义,操作成本高,一般场景不推荐

















