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


33

Apachehttpd随响应数据发送回的HTTP标头之一是“服务器”。例如,我的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,但是“ Server:”标题仍然出现。我已经尝试过mod_headers。我启用了它,并且尝试了一些操作:

<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


3
自更改conf文件以来,您是否重新启动过Apache?我也从未见过名为“ httpd.com”的文件,通常称为“ httpd.conf”。
Michael Ozeryansky 2014年

@MichaelOzeryansky-感谢您发现拼写错误。它是“ httpd.conf”,我在更改httpd.conf后确实停止并启动了httpd。
Bruce Ediger 2014年

Answers:


12

服务器ID /令牌标头由“ ServerTokens ”指令(由提供mod_core)控制。除了修改Apache HTTPD源代码或使用mod_security模块外,没有其他方法可以完全实现禁止服务器ID标头。

使用这种mod_security方法,您可以禁用文件中所有模块的指令/功能modsecurity.conf,并且仅利用服务器标头ID指令,而无需任何其他“包g”。


这确实有效,非常感谢。我必须注意,mod_security不是Arch Linux的普通软件包之一。AUR中有一个PKGBUILD,但自2011年(截至2014年4月12日)以来未进行过更新,它引用的是mod_security的真正旧版本。与往常一样,您的发行版可能会有所不同。
Bruce Ediger 2014年

25

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

在包含所有mod之后,httpd.conf您只需取消设置所选标题即可。

Header unset Server

ServerSignature Off
ServerTokens Prod

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


2
自定义文本需要mod_sec才能完全隐藏工作区,否则您的解决方案既好又简单:)
intika 2015年

这已经不是我使用Apache 2.2在CentOS影响(修补)6
JPH

1
在Apache 2.4中,它被报告为语法错误:无效的命令“ Header”,可能是拼写错误或由服务器配置中未包含的模块定义的
Raptor

3
@Raptor您必须使用sudo a2enmod headers
Ortomala Lokni '16

1
Header unset Server在Apache 2.2和2.4中不起作用。响应标头仍包含Server: Apache
Maris B.18年

13

只需为仍在寻找的人更新此内容即可。我无法更改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

在Header unset Server的主题上,我找到了一个错误报告,Apache开发人员在该报告中指出这是无法解决的问题。尽管对HTTP / 1.1的规范RFC 2616部分由Tim Berners-Lee撰写,并说Server标签是可选的,但对他们来说,这显然是一个哲学问题。

我真的想将Server标签设置为“未知”,以使我们的Qualys扫描满意。因此,在此DigitalOcean教程之后,我安装了mod_security(现在称为libapache2-modsecurity)。祝您好运,我希望我对您以后的所有读者有所帮助。


1

我已经在某种程度上对我有用的Oracle HTTP Server 11.1.1.9(基于Apache 2.2.22构建)上进行了测试。

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

ServerTokens无

响应头看起来像这样:

HTTP / 1.1 200 OK

日期:2015年12月28日星期一,格林尼治标准时间

服务器:

上次修改时间:2015年12月27日,星期日


2
在Centos 6存储库中的Apache 2.2库存中,将值设置为“ none”会使Apache输出所有数据。例如:“服务器:Apache / 2.2.15(CentOS)DAV / 2 PHP / 5.3.3 mod_ssl / 2.2.15 OpenSSL / 1.0.1e-fips Phusion_Passenger / 4.0.59 mod_perl / 2.0.4 Perl / v5.10.1”
jph

同意,您不能使用none最新的Apache:ServerTokens takes 1 argument: 'Prod(uctOnly)', 'Major', 'Minor', 'Min(imal)', 'OS', or 'Full'
vladkras
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.