最有效方式是用 curl -I 检查响应头中 Server 字段是否泄露真实软件名和版本,需对正常页、错误页、HTTPS 页分别验证,并通过 server_tokens off 和 add_header Server "WebShield" always 等配置统一隐藏或伪装该字段。

直接用 curl -I 查响应头,是验证 Server 字段是否暴露的最有效方式。防御的关键不是“删掉字段”,而是让攻击者看到的信息失去参考价值——比如隐藏真实软件名、抹去版本号、统一输出伪装标识。
用 curl -I 快速检测 Server 字段泄露
执行命令后重点观察三类请求的响应头:
- 正常页面:
curl -I http://your-domain.com→ 检查是否有Server: nginx/1.20.1或Server: Apache/2.4.52 (Ubuntu)这类带版本的行 - 错误页面:
curl -I http://your-domain.com/404test→ 很多配置只改了主站,404 等错误页仍原样输出后端信息 - HTTPS 页面:
curl -I https://your-domain.com→ SSL 虚拟主机需单独配置,否则容易漏掉
Nginx 隐藏 Server 字段的可靠做法
不建议编译时修改源码(维护成本高),推荐以下两种组合方式:
- 关闭版本显示:
server_tokens off;放在 http / server 块中,可去掉响应头和错误页里的版本号 - 覆盖 Server 值:
proxy_set_header Server "WebShield";(反向代理场景)或add_header Server "WebShield" always;(直连场景),注意加always才能作用于 4xx/5xx 响应
改完必须 nginx -t && systemctl reload nginx,再用 curl -I 验证。
Apache 和后端服务同步处理
仅改前端 Web 服务器不够,后端若直出 Server 头,仍会暴露:
- Apache:在
httpd.conf或站点配置中添加ServerSignature Off和ServerTokens Prod - PHP:确认
php.ini中expose_php = Off,避免X-Powered-By: PHP/8.1.2泄露 - Tomcat:修改
conf/server.xml,在 Connector 中添加server="WebShield"属性
验证是否真正生效
别只信配置文件,要信 curl 输出。一次完整验证包括:
- 对首页、不存在路径、HTTPS 地址分别执行
curl -I - 检查响应头中是否完全无
Server:行,或仅出现你指定的统一字符串(如Server: WebShield) - 打开浏览器开发者工具 → Network → 刷新页面 → 查看 Response Headers,确认与 curl 结果一致
做到这一步,攻击者就无法通过 Server 字段快速定位软件类型和版本,大幅增加其漏洞利用门槛。


















