Назад | Перейти на главную страницу

Apache mod_headers не работает

У меня есть приложение Rails, обслуживаемое с использованием Apache 2 и Phusion Passenger. В качестве меры безопасности я пытаюсь подавить все заголовки HTTP, связанные с сервером. Я успешно отключил Apache, но у меня проблемы с использованием mod_headers подавить Пассажирские. Я включил mod_headers используя a2enmod команда и перезапустила процесс Apache, но X-Powered-By и X-Runtime заголовки все еще появляются.

Это мой файл vhost:

<VirtualHost *:80>

  ServerAdmin webmaster@example.com
  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>

Из mod_headers документы:

Директивы, предоставляемые mod_headers, могут встречаться практически в любом месте конфигурации сервера. Они действительны в разделах конфигурации основного сервера и виртуального хоста, внутри разделов и, а также в файлах .htaccess.

Если вы хотите, чтобы это применялось ко всему vhost, зачем вставлять его внутрь <Location> теги? Просто поместите директивы в основной конфиг vhost.

<VirtualHost *:80>

  ServerAdmin webmaster@example.com
  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>

Я не тестировал это, поэтому заранее извиняюсь, если это неправильно.

У меня нет под рукой установки Apache, но <Location *> выглядит подозрительно. В документы сказать:

URL-адрес может использовать подстановочные знаки. В строке с подстановочными знаками? соответствует любому одиночному символу, а * соответствует любой последовательности символов. Ни один из подстановочных знаков не соответствует / в URL-пути.

Я подозреваю, что вы не соответствуете ни одному URL. Пытаться:

<Location />
  <IfModule mod_headers.c>
    Header unset X-Runtime
    Header unset X-Powered-By
  </IfModule>
</Location>

Не говоря уже о том, что по-прежнему очень легко определить сервер, по крайней мере, для версий Corse, даже без заголовков, а "скриптовые детишки" просто пробуют все атаки и не утруждают себя проверкой версий тем не мение.

Что будет, если убрать строчку, просто оставьте команды.

Интересно, загружается ли он вообще, попробуйте добавить статический заголовок для проверки.