На одном сервере, который я использую для демонстрации системы, у меня есть статический веб-сайт, работающий на apache2, и демонстрационное веб-приложение, работающее на экземпляре tomcat. Оба работают нормально при прямом доступе. Я установил прокси-сервер для преобразования порта веб-приложения и беспорядочного URL-адреса во что-то простое, но получаю противоречивые результаты.
Сервер представляет собой каплю Digital Ocean Ubuntu 18.04 с Apache2. Мой основной веб-сайт использует Drupal и имеет стандартный URL https://example.com
. Веб-приложение - это большая корпоративная система, обслуживаемая Tomcat7 и доступная по адресу https://example.com:4444/webui/
. Цель состоит в том, чтобы получить доступ к веб-приложению по адресу https: // example. com / my_demo
.
Прокси-сервер определяется на виртуальном хосте apache2 стандартным способом
ProxyPass "/webui" "https://example.com:4444/webui/"
ProxyPassReverse "/my_demo" "https://example.com:4444/"
И приложение tomcat имеет запись прокси в server.xml
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="4444" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/opt/webapp/keystore/webappKeystore" keystorePass="redactedPassword"
clientAuth="false" sslProtocol="TLS"
proxyName="example.com"
proxyPort="443"/>
Кажется, это работает, но недостаточно хорошо .
У меня проблема в том, что веб-приложение не всегда работает с прокси. Он написан на ZK и содержит набор ссылок на ресурсы, которые используют путь контекста приложения, например ("/webui/images/theimage.jpg"), и другие, которые используют контекст рабочего стола ZK, что может закончиться отправкой "images / theimage.jpg ". В результате в веб-приложении в некоторых местах отсутствуют изображения кнопок, а в других - нет.
Кроме того, при выходе из системы веб-приложение перенаправляет браузер обратно на адрес tomcat, но ссылка не работает и заканчивается как / webui / index с ошибкой 403 вместо /webui/index.zul, как будто он был переписан неправильно.
Опять же, при запуске с сервера tomcat без использования прокси веб-приложение работает нормально.
Я ищу для предложений о том, как отладить это и заставить веб-приложение Tomcat работать под прокси. Я пробовал использовать dump_io и журналы перезаписи, но не вижу, где возникают ошибки, кроме проблем, упомянутых выше.
Есть ли другой элемент, который я должен проверить?
Любые предложения будут приняты с благодарностью.
Ваша проблема сводится к переписыванию абсолютных URI запроса, которые приходят с сервера приложений. Это можно сделать дважды:
Я бы предложил второй способ, поскольку он самый простой. Вам следует:
/my_demo
вместо /webui
. Это может быть так же просто, как переименовать webapps/webui
в webapps/my_demo
в CATALINA_BASE
.Настройте Apache на прокси /my_demo/
на https://example.com:4444/my_demo/
:
ProxyPass "/my_demo/" "https://example.com:4444/my_demo/".
ProxyPassReverse "/my_demo/" "https://example.com:4444/my_demo/".
PS : Использование HTTPS для Tomcat является IMHO overkill, просто настройте HTTP-коннектор с измененными атрибутами secure
и scheme
, чтобы Tomcat знал, что он проксируется через HTTPS:
<Connector port="4444"
scheme="https" secure="true"
proxyName="example.com"
proxyPort="443"/>
и измените https
на http
в директивах ProxyPass
.
ps: [11661].