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

Я настроил настройку инфраструктуры, в которой обратный прокси-сервер apache завершает запросы SSL. Затем запросы передаются на другой веб-сервер Apache внешнего интерфейса, а затем снова этот подключается через mod_jk/AJP к коту. Кажется, что установка проходит гладко без единого исключения. 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>

0 ответов

Другие вопросы по тегам