需在 Nginx 主配置文件 /www/server/nginx/conf/nginx.conf 的 http 块内添加 server_tokens off;,并确保无子配置覆盖、CDN 缓存或 PHP 应用泄露版本信息。

如何在 Nginx 配置中隐藏 Server 版本头
宝塔面板默认开启 server_tokens on,导致响应头暴露 Nginx 和系统版本(如 Server: nginx/1.22.1),这是常见安全审计扣分项。关掉它不难,但位置和生效逻辑容易搞错。
关键点:必须在 Nginx 主配置(/www/server/nginx/conf/nginx.conf)的 http 块内设置,不能只写在某个站点的 server 块里——后者无效。
- 打开
/www/server/nginx/conf/nginx.conf - 找到
http {开始的位置,在其内部第一行(或紧贴include语句前)添加:server_tokens off;
- 保存后执行
nginx -t检查语法,再systemctl reload nginx或在宝塔界面「重载配置」 - 验证方式:用
curl -I https://your-domain.com,确认响应头中Server只剩nginx,没有版本号
宝塔后台是否需要同步关闭「显示版本号」开关
宝塔 8.x+ 在「面板设置 → 安全设置」里有个「显示面板版本号」开关,但它只控制前端页面右下角的显示,和 HTTP 响应头完全无关。很多人误以为关了这个就安全了,其实毫无作用。
- 该开关不影响任何 HTTP Header、API 接口或 Nginx 输出
- 真正影响响应头的只有 Nginx 的
server_tokens和可能存在的自定义add_header Server - 如果你在站点配置里手动加过
add_header Server "Apache"这类覆盖,反而会暴露更奇怪的信息,建议删掉
为什么改完还是能看到版本号?常见漏点
改了主配置却没生效,大概率是被其他地方覆盖或缓存干扰。不是配置没写对,而是路径或优先级出问题。
- 检查是否在某个站点配置文件(如
/www/server/panel/vhost/nginx/xxx.conf)里写了server_tokens on—— 子配置会覆盖全局设置 - CDN(如 Cloudflare、腾讯云 CDN)可能缓存了旧响应头,清除 CDN 缓存或临时关闭 CDN 测试
- 某些 PHP 应用(如 WordPress 插件、ThinkPHP 调试模式)会在 HTML 注释或响应体里输出版本信息,这不属于 Nginx 管控范围
- 用
curl -I测试时加-k(跳过证书验证)和-H "Host: your-domain.com"(避免直连 IP 导致匹配到默认站)
额外加固:要不要删掉 X-Powered-By 头
PHP 默认返回 X-Powered-By: PHP/8.1.27,虽然不如 Server 头关键,但也是信息泄露点。宝塔环境下,它由 PHP-FPM 控制,不是 Nginx 配置能直接删的。
- 编辑
/www/server/php/81/etc/php.ini(路径中的81替换为你实际的 PHP 版本号) - 找到
expose_php = On,改为expose_php = Off - 重启 PHP:在宝塔「软件商店 → PHP → 设置 → 服务 → 重启」
- 注意:部分框架(如 Laravel)会在中间件里手动设置该头,这时需查代码或中间件配置


















