更改 Apache httpd“服务器:”HTTP 标头

更改 Apache httpd“服务器:”HTTP 标头

HTTP 标头之一阿帕奇httpd发送回的响应数据是“服务器”。例如,我的 Web 服务器机器是相对最新的 Arch Linux。它发送回的标头与以下内容非常相似:

HTTP/1.1 404 Not Found
Date: Thu, 10 Apr 2014 17:19:27 GMT
Server: Apache/2.4.9 (Unix)
Content-Length: 1149
Connection: close
Content-Type: text/html

我有ServerSignature off/etc/httpd/conf/httpd.conf但“服务器:”标题仍然出现。我已经尝试过模组头。我已启用它,并且尝试了一些操作:

<IfModule headers_module>
Header set ProcessingTime "%D"
Header set Server BigJohn
</IfModule>

停止并启动httpd上述配置后,HTTP 标头包含类似 的内容ProcessingTime: 1523,但“Server:”标头行保持不变。所以我知道“mod_headers”已安装并启用,并且正在工作,但不是我想要的。

我看到一个名为“mod_security”的东西声称可以做到这一点,但我不想要 mod_security 附带的所有其他包袱。

更新:

安装后mod_security,您只需要一些指令:

<IfModule security2_module>
SecRuleEngine on
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>

这是mod_security2.7.7的

答案1

mod_security 很棒,但您并不真正需要它来实现您的目标。

包含所有模组后,httpd.conf您可以简单地取消设置您选择的标题。正如评论中所述,mod_headers需要启用。

Header unset Server

# if the above doesn't work, set a default value
# use the keyword 'always' to set the header even with error'ed responses
# (e.g. if your app is down)
Header always set Server "No peeking!"

ServerSignature Off
ServerTokens Prod

http://httpd.apache.org/docs/2.4/mod/core.html#serversignature

答案2

只是为仍在寻找的人更新此内容。我在更改 HTTP 标头中的服务器行时遇到问题。此建议适用于带有 systemd 和 Apache 2.4.7 的 Debian 分支发行版。具体来说,我使用的是 Ubuntu Server LTS 14.04.03。我发现的一些建议是

grep -Ri servertokens /etc/apache2

这引导我到 /etc/apache2/conf-available/security.conf,其中指定了 ServerTokens 和 ServerSignature。因此,我对 /etc/apache2/apache2.conf 所做的任何更改都会被 security.conf 中已指定的指令覆盖。

我只是简单地更改了 security.conf 中的指令,Apache 就开始按我想要的方式工作。

ServerTokens Prod
ServerSignature Off

关于标头未设置服务器的主题,我发现了一个错误报告,其中 Apache 开发人员表示这是一个无法修复的问题。显然对他们来说这是一个哲学问题,尽管 HTTP/1.1 的规范 RFC 2616 部分由 Tim Berners-Lee 撰写,并表示服务器标签是可选的。

我真的很想将服务器标签设置为“未知”以使我们的 Qualys 扫描满意。所以,我安装了 mod_security,现在称为 libapache2-modsecurity,如下这个 DigitalOcean 教程。祝你好运,我希望我对所有未来的读者有所帮助。

答案3

服务器 ID/令牌标头由“控制”服务器令牌" 指令(由 提供mod_core)。除了修改 Apache HTTPD 源代码,或者使用mod_securitymodule 之外,没有其他办法完全抑制服务器 ID 标头。

通过这种mod_security方法,您可以禁用文件中的所有模块指令/函数modsecurity.conf,并仅利用服务器标头 ID 指令,而无需任何额外的“包袱”。

答案4

我在 Oracle HTTP Server 11.1.1.9(基于 Apache 2.2.22 构建)上测试了一些在某种程度上对我有用的东西。

将“ServerTokens”设置为“none”似乎会删除“Server”标头值,尽管标头本身一直在响应中发送,但现在它具有空值。

服务器令牌 无

响应标头如下所示:

HTTP/1.1 200 好

日期:2015 年 12 月 28 日星期一 07:02:45 GMT

服务器:

最后修改时间:2015 年 12 月 27 日星期日 07:29:13 GMT

相关内容