AJP-прокси, который отображает внутреннее имя сервлета на другое внешнее имя - PullRequest
0 голосов
/ 10 февраля 2010

Использование apache2 Я хочу настроить прокси-сервер AJP для сервера Tomcat, который внешне сопоставляет URL-адрес внутреннего сервлета с совершенно другим URL-адресом. В настоящее время я использую следующие конфигурации:

Конфигурация Apache2:

<IfModule mod_proxy.c>
    ProxyPreserveHost on
    ProxyPass /external_name ajp://192.168.1.30:8009/servlet_name
    ProxyPassReverse /external_name ajp://192.168.1.30:8009/servlet_name
</IfModule>

Обратите внимание, что external_name и servlet_name различны.

Конфигурация Tomcat 6:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Это, однако, не работает. Похоже, Apache перенаправляет http-запросы в Tomcat. Однако URL-адреса и перенаправления, возвращаемые Tomcat, все еще используют исходный servlet_name, и Apache не сопоставляет их с external_name.

Возможно ли это вообще с AJP? Если нет, то можно ли это сделать с помощью простого http-прокси?

Ответы [ 4 ]

0 голосов
/ 29 октября 2013

Для меня это, кажется, вызывает проблемы:

ProxyPreserveHost on
ProxyPass /external_name ajp://192.168.1.30:8009/servlet_name
ProxyPassReverse /external_name http://192.168.1.30/servlet_name

Хотя это, похоже, работает:

ProxyPreserveHost on
ProxyPass /external_name ajp://192.168.1.30:8009/servlet_name
ProxyPassReverse /external_name ajp://192.168.1.30:8009/servlet_name

Я не знаю почему, но он просто сделал.

0 голосов
/ 28 мая 2010

(поздний ответ, но я сам столкнулся с этой проблемой.)

Похоже, что ProxyPassReverse, использующий ajp:, не работает, потому что заголовки, возвращаемые из перенаправления, не имеют ajp: URL в Location :, у них есть http: URL. ProxyPassReverse просто вызывает перезапись соответствующих заголовков, и эта строка не соответствует тому, что возвращается.

Это должно работать (при условии, что поле Location: использует этот числовой адрес а не имя хоста.)

ProxyPreserveHost on
ProxyPass /external_name ajp://192.168.1.30:8009/servlet_name
ProxyPassReverse /external_name http://192.168.1.30/servlet_name

(Вы можете использовать 'curl -I' для проверки заголовков перенаправления и отладки.)

См. эту заметку или более сложное решение здесь с использованием mod_proxy_html для перезаписи URL-адресов на веб-страницах.

0 голосов
/ 29 июня 2012

Кроме ответа от Стивена Д. Маевского есть еще одна проблема. Если целевое приложение использует имя хоста запроса для создания перенаправления (302 перемещено временно), оно не будет работать с несколькими именами хоста. Для каждого имени необходимо создать несколько конфигураций, например:

ProxyPassReverse /external_name http://server.com/servlet_name
ProxyPassReverse /external_name http://server.org/servlet_name
ProxyPassReverse /external_name http://server.co.uk/servlet_name

На самом деле ProxyPreserveHost on должен решить эту проблему и заменить заголовок HOST во входящих запросах адресом или IP-адресом, указанным в ProxyPass. К сожалению, похоже, что ProxyPreserveHost не работает с коннекторами ajp. Том в моей конфигурации все еще получил имя хоста, полученное из браузера, вместо того, чтобы заменить его 192.168.1.30. В результате перенаправления на основе браузера все еще не работали для каждого имени.

Следующая конфигурация также не сработала: - (

# NOT WORKING !!!
ProxyPassReverse /external_name http://%{HTTP_HOST}/servlet_name 

Обходной путь - использовать http вместо ajp.

ProxyPreserveHost on
ProxyPass /external_name ajp://192.168.1.30:8009/servlet_name
ProxyPassReverse /external_name http://192.168.1.30/servlet_name

Кто-то глубоко исследовал это?

0 голосов
/ 11 февраля 2010

Отображение разных имен между Apache и Tomcat может быть довольно сложным и во многом зависит от того, как веб-приложение строит свои URL-адреса для ответа.

По сути, ваши настройки верны, но если ваше приложение использует свое собственное имя сервлета для перенаправлений и URL, ProxyPassReverse не будет отображать их.

Если вам нужна такая установка, посмотрите на mod_proxy_html (сторонний модуль Apache), который будет анализировать и перезаписывать также содержимое, а не только заголовки URL и ответа в виде mod_proxy.

...