Сообщение об ошибке Apache - Reverse Proxy и 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
Ответы
Ответ 1
Существует статья под названием Запуск обратного прокси-сервера в Apache, который, похоже, решает вашу проблему. Он даже использует тот же example.com и /app 1, что и в вашем примере. Перейдите к разделу "Настройка прокси" для примеров использования ProxyPassReverse.
Ответ 2
статья 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
Я упоминаю об этом только потому, что другое стороннее приложение, которое мы проксимировали, отправляло перенаправления, которые не включали их внутреннее имя хоста, только другой порт.
В качестве заключительной заметки имейте в виду, что
Ответ 3
Попробуйте использовать AJP-коннектор вместо обратного прокси-сервера. Конечно, это не тривиальное изменение, но я обнаружил, что многие кошмары URL уходят при использовании AJP вместо обратного прокси.