Назад | Перейти на главную страницу

mod_proxy: передать путь от исходного запроса к проксируемому приложению

Я борюсь с обратным проксированием приложения, работающего на сервере Tomcat на закрытом порту за Apache. Для удобства скажем, что я хочу отменить запросы прокси для 'http: // мойдомен / приложения / мое_приложение /'в приложение Tomcat в'http: // локальный: 8082 / my_app /'на удаленном сервере. Все отлично работает со следующими настройками прокси в файле Apache vhost.conf:

ProxyRequests       off
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://localhost:8082/

За исключением одной части приложения, которая генерирует файл веб-запуска Java, который должен быть выполнен на клиенте и должен установить соединение с приложением Tomcat в 'http: // локальный: 8082 / my_app / webstart'(на удаленном сервере).

Суть проблемы в том, что это соединение, очевидно, не будет работать, поскольку а) запрос localhost будет интерпретироваться относительно клиентского компьютера, и б) даже если он будет указывать на удаленный сервер, порт 8082 там закрыт.

Следовательно, я понял, как ProxyPreserveHost может помочь, чтобы имя хоста исходного запроса было передано в запрос веб-запуска Java:

ProxyRequests       off
ProxyPreserveHost   on
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://mydomain/

Это работает (даже внутренние перенаправления в проксируемом приложении Tomcat работают благодаря настройке ProxyPassReverse) ... почти. Остается одна проблема: в URL-адресе, который используется файлом веб-запуска Java, отсутствует часть '/ apps /', и он попытается подключиться к 'http: // mydomain / my_app / webstart', вместо того 'http: // mydomain / apps / my_app / webstart', что, очевидно, не удастся, поскольку только запросы, начинающиеся с / apps /, подвергаются обратному проксированию. Очевидно, прокси-приложение не «видит» полный исходный URL-адрес ('http: // мойдомен / приложения / мое_приложение /'), но только ту часть, которая отфильтрована обработкой прокси ('http: // mydomain / my_app /').

Есть ли какой-либо параметр прокси, который я забыл, который может заставить Apache передать путь от исходного URL-адреса к прокси-приложению?

С уважением,

Рон

Прокси-сервер вообще не видит исходный запрос; в этом весь смысл проксирования.

Вероятно, вам понадобится следующее:

ProxyPass /apps/ http://localhost:8082/apps/
ProxyPassReverse /apps/ http://localhost:8082/apps/

И сделайте приложения Tomcat доступными в этом контексте.