ServerName 与自定义 HTTP 头部无关,仅用于虚拟主机匹配;添加自定义头部需启用 mod_headers 模块并使用 Header 指令,Server 头无法通过 Header 修改,只能用 ServerTokens 和 ServerSignature 控制。

ServerName 本身和自定义 HTTP 头部没有直接关系。它只用于虚拟主机匹配,不控制响应头内容。想添加或修改非标准自定义头部(比如 X-Api-Version、X-Request-ID),关键在启用并正确使用 mod_headers 模块,而不是调整 ServerName。
确保 mod_headers 已启用
这是前提条件,否则所有 Header 指令都会报错(如 Invalid command 'Header'):
- 打开
xampp\apache\conf\httpd.conf - 找到这行:
#LoadModule headers_module modules/mod_headers.so - 去掉开头的
#,保存后重启 Apache
在合适位置添加 Header 指令
ServerName 不影响头部设置,但你可以把 Header 指令放在与 ServerName 同级的 <VirtualHost> 块内,实现按站点定制:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 例如,在
<VirtualHost *:80>中写:Header always set X-Api-Version "v2" - 也可以放在
<Directory>或<Location>块中,实现路径级控制 - 用
Header always set确保连错误页(404、500)也带上该头
注意 Server 头不能被覆盖
你无法用 Header 指令修改或删除 Server 响应头——这是 Apache 内核行为,不是配置遗漏:
- 真正能控制它的只有两个指令:
ServerTokens Prod(返回仅Apache)和ServerSignature Off(禁用错误页底部信息) - 这两个要写在主配置(httpd.conf)里,且需重启生效
- 别尝试
Header edit Server或Header unset Server,它们无效
避免头部冲突与覆盖
如果全局配置和虚拟主机都设置了同一头部(如 CSP),默认以最后定义的为准;但更稳妥的做法是显式清除再设置:
- 先清除:
Header unset Content-Security-Policy - 再设置:
Header always set Content-Security-Policy "default-src 'self'" - 或者用
Header set(不带 always)让应用层仍有覆盖机会

















