На одном сервере, который я использую для демонстрации системы, у меня есть статический веб-сайт, работающий на 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 - это ИМХО излишество, просто настройте HTTP-коннектор с secure
и scheme
атрибуты изменены, чтобы Tomcat знал, что он проксируется через HTTPS:
<Connector port="4444"
scheme="https" secure="true"
proxyName="example.com"
proxyPort="443"/>
и изменить https
к http
в ProxyPass
директивы.