必须在主配置文件中设置servertokens prod和serversignature off:前者使响应头仅显示“server: apache”,后者禁用错误页底部服务器信息;二者均不支持虚拟主机内配置,需配合header unset server、expose_php=off及cdn/代理层清理才能彻底隐藏。
要在 apache 中真正隐藏版本号和服务器细节,servertokens prod 和 serversignature off 是两项必须配置的基础项,但它们都只能在主配置文件中生效,不能放在 <virtualhost></virtualhost> 块内。
ServerTokens:精简响应头中的 Server 字段
Apache 默认在 HTTP 响应头中返回完整标识,例如:Server: Apache/2.4.52 (Ubuntu) OpenSSL/3.0.2
攻击者可据此快速定位已知漏洞。设为 Prod 后,响应头仅保留:Server: Apache
- 编辑主配置文件:
/etc/apache2/apache2.conf(Debian/Ubuntu)或/etc/httpd/conf/httpd.conf(RHEL/CentOS) - 查找
ServerTokens行,改为ServerTokens Prod;若不存在则直接添加 - 该指令不接受虚拟主机级配置,写在
<virtualhost></virtualhost>内会被忽略 - 注意:即使设为
Prod,仍会暴露 “Apache” 字样;如需彻底移除,需配合mod_headers
ServerSignature:关闭错误页底部的服务器签名
当触发 404、500 等错误时,Apache 默认在 HTML 页面底部插入类似以下文字:Apache/2.4.52 (Ubuntu) Server at example.com Port 80
- 在同一个主配置文件中,查找或添加
ServerSignature Off - 该设置只影响 Apache 自身生成的错误页、目录列表页、代理错误页等,不影响 PHP 或应用层输出的内容
- 若使用了自定义错误页(如
ErrorDocument 404 /404.html),需人工检查 HTML 源码,确保未硬编码服务器信息 - 同样不支持虚拟主机内配置,必须位于全局作用域
配套加固:移除或清空 Server 头及其他敏感头
仅靠 ServerTokens Prod 并不能真正“隐藏 Apache”,只是简化显示。要彻底消除痕迹,还需以下操作:
- 启用
mod_headers模块:a2enmod headers(Debian/Ubuntu)或确认LoadModule headers_module已加载(RHEL/CentOS) - 在主配置文件中添加:
Header always unset Server(Apache ≥ 2.4.29)
或Header always set Server ""(旧版本) - 检查并关闭 PHP 的版本暴露:
expose_php = Off(在php.ini中) - 清理 CDN 或反向代理(如 Nginx)可能覆盖的
Server头,需在代理层同步处理 - 禁用高危模块:
a2dismod autoindex info status userdir include,防止目录遍历、状态泄露等风险
验证是否生效
配置完成后务必验证,避免遗漏:
- 用命令检查响应头:
curl -I https://yoursite.com,确认无版本、系统、模块信息,且Server头已消失或为空 - 访问一个不存在路径(如
/nonexistent),查看错误页源码,确认底部无 Apache 标识文字 - 检查自定义错误页、PHP 输出、静态资源响应,确保没有残留
X-Powered-By或其他敏感头 - 若使用 XAMPP,注意其默认配置常被注释在
conf/extra/httpd-default.conf中,需确认Include行已启用且未被虚拟主机配置覆盖










