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_security
2.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_security
module 之外,没有其他办法完全抑制服务器 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
。
。