Apache - обратный прокси и сообщение о статусе HTTP 302

Моя команда пытается установить обратный прокси-сервер Apache с сайта клиента в одно из наших веб-приложений.

http://www.example.com/app1/some-path соответствует http://internal1.example.com/some-path

Внутри нашего приложения мы используем struts и для определенных действий настроили redirect = true, чтобы обеспечить определенную функциональность. 302 сообщения о состоянии от этих перенаправлений заставляют пользователя отключаться от прокси, что приводит к отображению страницы с ошибкой для конечного пользователя.

HTTP / 1.1 302 Найдено расположение: http://internal.example.com/some-path/redirect < / а>

Есть ли способ настроить обратный прокси в apache, чтобы перенаправления работали правильно?

http://www.example.com/app1/some-path/redirect


person Rob    schedule 09.10.2008    source источник


Ответы (4)


В статье под названием Запуск обратного прокси-сервера в Apache, похоже, рассматривается твоя проблема. Он даже использует те же example.com и / app1, что и в вашем примере. В разделе «Настройка прокси» приведены примеры использования ProxyPassReverse < / а>.

person Kevin Hakanson    schedule 10.10.2008

статье о AskApache вполне полезно, но на практике я обнаружил, что комбинация правил перезаписи и ProxyPassReverse более гибкая. Итак, в вашем случае я бы сделал что-то вроде этого:

    <VirtualHost example>
       ServerName www.example.com

       ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/
       RewriteEngine On
       RewriteRule /app1/(.*)   http://internal1.example.com/some-path$1 [P]

       ...
    </VirtualHost>

Мне это нравится больше, потому что это дает вам более детальный контроль над путями, которые вы проксируете для внутреннего сервера. В нашем случае мы хотели показать только часть стороннего приложения. Обратите внимание, что это не касается жестко закодированных ссылок в HTML, о которых говорится в статье AskApache.

Также обратите внимание, что у вас может быть несколько строк ProxyPassReverse:

    ProxyPassReverse / http://internal1.example.com/some-path
    ProxyPassReverse / http://internal2.example.com/some-path

Я упоминаю об этом только потому, что другое стороннее приложение, которое мы проксировали, отправляло перенаправления, которые не включали их внутреннее имя хоста, а просто другой порт.

В заключение помните, что Firebug чрезвычайно полезен при отладке перенаправляет.

person Marcel Levy    schedule 23.10.2009

По сути, ProxyPassReverse должен позаботиться о переписывании заголовка Location за вас, как указал Кевин Хакансон.

Одна ошибка, с которой я столкнулся, - это отсутствие косой черты в конце аргумента url. Обязательно используйте:

ProxyPassReverse / http://internal1.example.com/some-path/

(обратите внимание на косую черту в конце!)

person philippn    schedule 09.03.2019

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

person James Schek    schedule 09.10.2008
comment
Я потратил 3 часа, пытаясь найти надежный способ предотвратить перенаправления http для передачи прокси https без AJP. В итоге я решил эту проблему, используя ajp вместо http в директивах ProxyPass и ProxyPassReverse. - person Gnafu; 06.04.2017