У нас есть текущая настройка, подобная следующей:
Базовая связь по перечисленным портам осуществляется следующим образом. [Все перечисленные номера портов являются портами прослушивания.] plugin-cfg.xml
настроен надлежащим образом, и эта же топология работает в производственной среде более 6 лет.
HTTPServer:8080 --> WASServer6.1:9081
Теперь нам нужно адаптироваться к этим новым вещам, несколько изменив топологию:
AuthService - автономная служба Java (не работает в контейнере приложения)
HTTPServer:8080 ---> AuthService:9090 ---> IHSServer:8081 ---> WASServer8.5:9081
\
\
WASServer6.1:9081
HTTPServer имеет httpd.conf
настроен с ProxyPass
директивы, передающие определенные запросы на AuthService: 9090. AuthService выполняет некоторую работу, а затем копирует заголовки запроса в новый запрос [POST], который отправляется на IHSServer: 8081, где plugin-cfg.xml
сопоставляется с информацией приложения B для пересылки запросов в приложение B, работающее на WASServer8.5. Конечная цель состоит в том, чтобы воспользоваться функцией осведомленности плагина о состоянии JVM WAS. В нашей среде производственного уровня будет несколько JVM, на которые IHS может пересылать запросы.
НОТА: AuthService не имеет состояния, поэтому нет необходимости в привязке к конкретной JVM на WAS.
Проблема в том, что это почему-то не работает. Запросы, отправленные по этому пути, возвращаются с HTTP 404
из IHSServer.
Устранение неполадок с подробным ведением журнала для IHSServer обнаружил, что по какой-то причине IHSServer видит номер порта исходного прокси-сервера пересылки (HTTPServer: 8080) и сравнивает его с VirtualHostGroup
список virtualhosts в plugin-cfg.xml
(Зачем?). Не найдя подходящего соответствия для порта 8080, он сдается и выдает 404.
Если мы заменим вещи, как показано ниже, сначала включив какой-либо другой сервер Apache, прослушивающий порт 80:
SomeOtherHTTPServer:80 ---> AuthService:9090 ---> IHSServer:8081 ---> WASServer8.5:9081
\
\
WASServer:9081
... запрос принят IHSServer, и все работает нормально. Точно так же, если правильно сформированные полезные данные запроса отправляются непосредственно в AuthService: 9090, запрос принимается, и все работает.
Мы попытались добавить <VirtualHost Name="*:8080"/>
к plugin-cfg.xml
на IHSServer, но, похоже, это не имеет значения.
РЕДАКТИРОВАТЬ: Мы взяли немного tcpdump
захватывает каждый узел на этом пути, и ясно, что IHSServer немедленно отклоняет запросы с кодом 404, когда они проходят через HTTPServer: 8080. IHSServer даже не пытается ничего сделать с запросом.
Что еще мы могли бы сделать, чтобы устранить / исправить это? Почему плагин на IHSServer заботится о порте прослушивания вышестоящего веб-сервера?
Возможно, вам также потребуется добавить псевдоним виртуального хоста VirtualHost Name="*:8080"
в WASServer8.5
слишком. Затем перезапустите сервер WAS 8.5, чтобы изменения вступили в силу, и это должно сработать.
Как правило, вам необходимо настроить виртуальный хост (*: 8080) на всех уровнях от конфигурации IHS до подключаемого модуля WAS и до WAS VirtualHosts.
Я не видел "ProxyPreserveHost" в вашем сообщении. Ты это пробовал?
Мне кажется вероятной причиной 404, сгенерированного сервером IHS на порту 8081 (из-за отсутствия совпадения в plugin-cfg.xml и обрабатываемого как статический файл) или самим AppServer (когда он проверяет собственное представление о хосте). aliasts для определения сопоставления веб-приложения).