Я борюсь с обратным проксированием приложения, работающего на сервере 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 доступными в этом контексте.