Перенаправление на 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

Спасибо

Tom

Ответ 1

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

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

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

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

Для справки:

Ответ 2

Вы можете попробовать с кодом статуса 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>

Ответ 3

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

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