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

Запретить Apache выполнять обратное проксирование определенных методов HTTP

Я использую apache как обратный прокси для сервера приложений ruby ​​on rails. Когда HTTP-запрос получен нестандартным HTTP-методом, это вызывает ошибку на сервере приложений, которая раскрывает некоторые (второстепенные) сведения о среде. Могу ли я запретить apache пересылать запросы, если метод HTTP не соответствует одному из безопасных стандартных методов?

[РЕДАКТИРОВАТЬ]

Используя ответ Шейна в качестве руководства, я придумал следующее, разместив здесь для справки.

RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|OPTIONS)
RewriteRule .* - [R=405,L]

Я обнаружил, что отменить проверку проще, позволяет apache возвращать правильный код ответа (405 - метод не разрешен) и означает, что все настройки прокси-сервера не изменены (т.е. вы можете использовать ProxyPass или ProxyPassMatch)

Должен быть в состоянии выполнить это с помощью <Limit>:

<Limit GET HEAD POST>
  ProxyPass / http://example.com/
</Limit>

Редактировать:

Придирчивые директивы ... мы будем придерживаться плана Б.

RewriteCond %{REQUEST_METHOD} ^(GET|HEAD|POST)$
RewriteRule ^/(.*)$ http://example.com/$1 [P,L]

Если используется обратный прокси Apache, все методы HTTP могут быть разрешены с помощью директивы:

<VirtualHost *:80>
    ServerName ....com

    <Proxy "*">
     Order deny,allow
     Allow from all
     AllowMethods GET PUT DELETE POST
    </Proxy>

    ProxyPass    ...
</VirtualHost>