Перенаправление на Apache (Сохранить параметры POST)

У меня установлен Apache на моем сервере, и мне нужно перенаправить с http на https. Причина этого в том, что наше решение для балансировки нагрузки не может передавать https, поэтому запросы поступают на http, а затем мы передаем их на https с помощью приведенных ниже строк в файле httpd.conf.

<VirtualHost 10.1.2.91:80>
     Redirect 302 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>

Это прекрасно работает для запросов GET, но запросы POST потеряют параметры, переданные по URL. Какой самый простой способ выполнить это перенаправление и сохранить параметры POST?

Мне нужно перейти с http://glad-test.com/GladQE/link.do по ссылке https://glad-test.com/GladQE/link.do поддерживающей параметры POST.

Спасибо

Том

3 ответа

Решение

Стандартные перенаправления Apache не смогут обрабатывать данные POST, поскольку они работают на уровне URL. Данные POST передаются в теле запроса, который отбрасывается, если вы выполняете стандартное перенаправление.

У вас есть возможность либо использовать PHP-скрипт для прозрачной пересылки запроса POST, либо использовать комбинацию Rewrite (mod_rewrite) и прокси (mod_proxy) модули для Apache выглядят следующим образом:

RewriteEngine On
RewriteRule /proxy/(.*)$ http://www.example.com/$1 [P,L]

P flag передает запрос в модуль Proxy, поэтому все, что приходит на ваш сайт (через GET или POST, не имеет значения) с URL-путем, начинающимся с /proxy/ будет прозрачно обрабатываться как перенаправление прокси http://www.example.com/,

Для справки:

Вы можете попробовать использовать код состояния HTTP 307, браузер, соответствующий требованиям RFC, должен повторить запрос на публикацию. Ссылка: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

В отличие от того, как 302 был исторически реализован, метод запроса не может быть изменен при повторном выдаче исходного запроса. Например, запрос POST должен повторяться с использованием другого запроса POST.

Чтобы изменить с 302 на 307, сделайте это:

<VirtualHost 10.1.2.91:80>
     Redirect 307 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>

Либо ваш общедоступный веб-сайт ДОЛЖЕН использовать SSL для защиты конфиденциальности, либо нет никакой важной информации, проходящей через него, и нет никакой вероятности того, что ваш сайт когда-либо будет использоваться в качестве контрольной панели для sslstripping (есть очень веская причина, по которой Google отображает результаты поиска более HTTPS).

Если вы не шифруете трафик между браузером и вашим сайтом, то почему вы пытаетесь зашифровать их между вашим балансировщиком нагрузки и веб-сервером? Если у вас есть SSL-завершение вне балансировщика нагрузки (очень глупый подход), то использование HTTPS между балансировщиком нагрузки и веб-сервером далеко не эффективно. Этот вопрос также подразумевает множество других проблем безопасности, таких как уязвимости фиксации / перехвата сеанса и уязвимости SSLStripping.

Другие вопросы по тегам