Я настроил инфраструктуру, в которой обратный прокси-сервер 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>