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

Webapp не работает с прокси

На одном сервере, который я использую для демонстрации системы, у меня есть статический веб-сайт, работающий на 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 запросов, которые поступают с сервера приложений. Это можно сделать двумя способами:

  1. Apache2 может перезаписывать все URI в проксируемом содержимом. Достаточно сложно поймать все места, где может встречаться URI.
  2. Tomcat7 может использовать те же абсолютные URI запроса, что и сервер Apache.

Я бы предложил второй способ, так как он самый простой. Вам следует:

  1. Разверните веб-приложение на /my_demo вместо того /webui. Это может быть так же просто, как переименование webapps/webui к webapps/my_demo в CATALINA_BASE.
  2. Настройте 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 директивы.