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

Есть ли другой элемент, который я должен проверить?

Любые предложения будут приняты с благодарностью.

0
задан 13 January 2020 в 00:29
1 ответ

Ваша проблема сводится к переписыванию абсолютных 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 является IMHO overkill, просто настройте HTTP-коннектор с измененными атрибутами secure и scheme, чтобы Tomcat знал, что он проксируется через HTTPS:

<Connector port="4444"
           scheme="https" secure="true"
           proxyName="example.com"
           proxyPort="443"/>

и измените https на http в директивах ProxyPass.

:

ps: [11661].

1
ответ дан 14 January 2020 в 23:28

Теги

Похожие вопросы