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

Обратный прокси-сервер и запрошенный URL-адрес Tomcat

Я настроил инфраструктуру, в которой обратный прокси-сервер apache завершает запросы SSL. Затем запросы передаются на другой внешний веб-сервер apache, а затем этот снова подключается через mod_jk / AJP к tomcat. Настройка проходит без единого исключения. Tomcat обслуживает веб-службы WSDL, и в этих XML-файлах один тег включает расположение хоста, которое должно быть идентично запрошенному URL-адресу.

Из-за текущей настройки расположение хоста представляет собой внутренний URL-адрес внешнего веб-сервера (подключенного через ajp), а не запрошенный внешний URL-адрес. Первой попыткой решить эту проблему было размещение внешнего URL-адреса в качестве URL-адреса прокси-сервера в tomcats server.xml, но этот метод не поддерживает запросы HTTP или HTTPS. Я должен определить одно.

Кроме того, в настоящее время услуги доступны через другие внешние серверы с совершенно другими URL-адресами (более простая настройка без обратного прокси).

Надеюсь, что изложил свою проблему понятно. Как я могу сообщить коту о запрошенном URL-адресе или, может быть, мне следует передать запрошенный URL-адрес во внешний интерфейс apache? Я немного застрял в данный момент.

Заранее спасибо.

/редактировать

Краткий обзор последовательности запросов:

**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**

ProxyPreserveHost On не работает, потому что он передает host.external во внешний интерфейс apache, и нет виртуального хоста, который соответствует этому виртуальному хосту, что приводит к ошибке 404 - не требует пояснений.

Конфигурация вообще не особенная. Внешний доступный обратный прокси-сервер имеет 2 виртуальных хоста (HTTP | HTTPS). Оба виртуальных хоста осведомлены о каждом клиенте, которого мы обслуживаем, в контексте / customerX, / customerY и так далее. Например. виртуальный хост HTTP:

<VirtualHost *:80>
ServerName host.external

ProxyPass /customerX http://customerX.internal
ProxyPassReverse /customerX http://customerX.internal

ProxyPass /customerY http://customerY.internal
ProxyPassReverse /customerY http://customerY.internal

...
</VirtualHost>

Я знаю, вторая строка подразумевается.

На втором apache есть один виртуальный хост (только HTTP) для каждого клиента с соответствующим именем сервера и необходимыми JkMounts для веб-приложений tomcats:

<VirtualHost *:80>
        ServerName customerX.internal

        JkMount ... 
</VirtualHost>