宝塔面板中 nginx 的 server_tokens 默认是开启的,http 响应头会明文显示 nginx/1.22.1 等完整版本号;需在全局配置 /www/server/nginx/conf/nginx.conf 的 http 块内设置 server_tokens off 并重载配置才能生效。

宝塔面板里 Nginx 的 server_tokens 默认是开还是关?
默认是开启的。也就是说,只要没手动改过,所有 HTTP 响应头里都会带 Server: nginx/1.22.1 这类信息——连小版本号都明晃晃写着。攻击者能据此判断你用的是哪个具体版本,再结合已知 CVE 快速筛选利用方式。
在宝塔面板中修改 server_tokens off 的真实位置
别去改网站配置文件(比如 /www/server/panel/vhost/nginx/xxx.conf),那只是单个站点的配置,加了也只对那个站生效,且下次「重载配置」或「重启 Nginx」时可能被覆盖。真正该改的是全局主配置:
-
/www/server/nginx/conf/nginx.conf—— 打开它,在http { ... }块最开头附近找有没有server_tokens行 - 如果没有,就手动加一行:
server_tokens off;(注意分号不能漏) - 如果已有但值是
on或带注释,直接改成off并取消注释
改完必须点宝塔面板右上角「重载配置」,不是「重启」,也不是「重载 Nginx」按钮旁边的「启动」——选错就白改了。
改完怎么验证是否生效?
别只看浏览器开发者工具 Network 里的响应头,有些 CDN 或反向代理会覆盖它。最稳妥的是用 curl 直连服务器 IP + 端口(绕过 CDN):
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
curl -I http://你的服务器IP
观察返回头里有没有 Server: 字段。如果只剩 Server: nginx(没版本号)或者压根没这行,说明成功;如果还显示 nginx/1.22.1,大概率是改错了文件、没重载、或者被其他配置覆盖了(比如某个 include 文件里又写了 on)。
为什么有时改了还是显示版本号?
常见几个坑:
- 改了子配置(如站点 conf)但没在
http块里统一关,Nginx 会以「最内层作用域」为准,子配置里没写就继承父级,写了就覆盖——所以必须确保全局http块设为off - 用了第三方模块(比如某些 WAF 插件)自己往响应头里塞
Server,这种就得查对应模块文档,server_tokens对它无效 - 宝塔升级后自动恢复了默认配置,建议把修改后的
nginx.conf备份一份,升级前对比一下
真正起效的关键就两点:写对位置(http 块)、重载到位。别的都是干扰项。










