我有一个使用 Apache 2 和 Phusion Passenger 提供服务的 Rails 应用程序。作为一项安全措施,我试图抑制所有与服务器相关的 HTTP 标头。我已成功关闭 Apache 的标头,但在mod_headers
抑制 Passenger 的标头时遇到了麻烦。我已mod_headers
使用a2enmod
命令启用并重新启动 Apache 进程,但X-Powered-By
和X-Runtime
标头仍然出现。
这是我的虚拟主机文件:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/deploy/public_html/railsapp/current/public
LogLevel warn
ErrorLog /home/deploy/public_html/railsapp/shared/log/error.log
CustomLog /home/deploy/public_html/railsapp/shared/log/access.log combined
# Suppress Phusion Passenger HTTP headers
<Location *>
<IfModule mod_headers.c>
Header unset X-Runtime
Header unset X-Powered-By
</IfModule>
</Location>
</VirtualHost>
- 我究竟做错了什么?
答案1
mod_headers 提供的指令几乎可以出现在服务器配置中的任何位置。它们在主服务器配置和虚拟主机部分、和部分内以及 .htaccess 文件中有效。
如果您希望将其应用于整个 vhost,为什么要将其放在<Location>
标签内?只需将指令放在主 vhost 配置内即可。
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/deploy/public_html/railsapp/current/public
LogLevel warn
ErrorLog /home/deploy/public_html/railsapp/shared/log/error.log
CustomLog /home/deploy/public_html/railsapp/shared/log/access.log combined
<IfModule mod_headers.c>
Header unset X-Runtime
Header unset X-Powered-By
</IfModule>
</VirtualHost>
我还没有测试过,所以如果不正确的话,请提前道歉。
答案2
我手头没有 Apache 安装,但<Location *>
看起来很可疑。文档说:
URL 可以使用通配符。在通配符字符串中,? 匹配任意单个字符,* 匹配任意字符序列。两个通配符均不匹配 URL 路径中的 /。
我怀疑您没有匹配任何 URL。请尝试:
<Location />
<IfModule mod_headers.c>
Header unset X-Runtime
Header unset X-Powered-By
</IfModule>
</Location>
答案3
撇开这一点不谈,确定服务器仍然很容易,至少对于没有标题的版本来说,以及“脚本小子”只是尝试所有的攻击,而懒得检查版本反正。
如果删除该行,只保留命令,会发生什么情况?
我想知道它是否正在被加载,请尝试添加一个静态标头来验证。