必须在主配置文件中设置servertokens prod和serversignature off:前者使响应头仅显示“server: apache”,后者禁用错误页底部服务器信息;二者均不支持虚拟主机内配置,且需配合expose_php=off、header unset server及cdn/代理层清理才能彻底隐藏。

要真正减少 Apache 服务器的信息暴露,ServerTokens Prod 和 ServerSignature Off 是必须设置的两项基础配置,但它们只在主配置文件中生效,不能写在虚拟主机(<virtualhost></virtualhost>)块内。
ServerTokens:控制响应头中的服务器标识
默认情况下,Apache 在 HTTP 响应头中会返回类似 Server: Apache/2.4.52 (Ubuntu) OpenSSL/3.0.2 的完整信息,这对攻击者极具价值。设为 Prod 后,响应头仅显示 Server: Apache,不带版本、系统或模块细节。
- 该指令仅接受全局作用域,必须放在
httpd.conf或apache2.conf中,不能在<virtualhost></virtualhost>或<directory></directory>内使用 - 即使设为
Prod,仍会暴露 “Apache” 字样;如需彻底隐藏,需配合mod_headers模块执行Header unset Server(Apache ≥ 2.4.29)或Header set Server ""(旧版本) - 注意:CDN 或反向代理(如 Nginx)可能覆盖此设置,需在代理层同步清理
Server头
ServerSignature:关闭错误页底部的服务器签名
当发生 404、500 等错误时,Apache 默认会在页面底部添加一行类似 Apache/2.4.52 (Ubuntu) Server at example.com Port 80 的文字。启用 ServerSignature Off 可完全禁用该行为。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 同样只能在主配置或站点级配置(非虚拟主机块)中设置
- 若使用了自定义错误页(如
ErrorDocument 404 /404.html),需人工检查 HTML 内容,确保未硬编码服务器信息 - 该设置不影响 PHP 错误页或应用层生成的内容,仅控制 Apache 自身渲染的错误模板
配套必须做的三件事
仅靠以上两项远远不够。真实环境中常因疏漏导致信息再次泄露:
-
PHP 补漏:检查
php.ini,确认expose_php = Off,否则会返回X-Powered-By: PHP/8.3.6 -
禁用危险模块:运行
a2dismod autoindex info status userdir include(Debian/Ubuntu)或注释掉对应LoadModule行(RHEL/CentOS),防止目录列表、服务器状态页等被滥用 -
验证是否生效:用
curl -I https://yoursite.com查看响应头,访问一个不存在路径确认错误页无签名,并检查源码中是否残留版本字眼
常见误区提醒
很多人以为在虚拟主机里加一句 ServerTokens Prod 就完事了——这不会起任何作用,Apache 会直接忽略。也有人只改了响应头,却忘了 PHP 或 CDN 仍在发版号。安全不是单点配置,而是层层收敛的过程。










