Apache mod_headers 不工作

Apache mod_headers 不工作

我有一个使用 Apache 2 和 Phusion Passenger 提供服务的 Rails 应用程序。作为一项安全措施,我试图抑制所有与服务器相关的 HTTP 标头。我已成功关闭 Apache 的标头,但在mod_headers抑制 Passenger 的标头时遇到了麻烦。我已mod_headers使用a2enmod命令启用并重新启动 Apache 进程,但X-Powered-ByX-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 文档

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

撇开这一点不谈,确定服务器仍然很容易,至少对于没有标题的版本来说,以及“脚本小子”只是尝试所有的攻击,而懒得检查版本反正

如果删除该行,只保留命令,会发生什么情况?

我想知道它是否正在被加载,请尝试添加一个静态标头来验证。

相关内容