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

Нисходящий сервер IBM Http возвращает 404 только при доступе через другой вышестоящий веб-сервер IHS

У нас есть текущая настройка, подобная следующей:

Базовая связь по перечисленным портам осуществляется следующим образом. [Все перечисленные номера портов являются портами прослушивания.] plugin-cfg.xml настроен надлежащим образом, и эта же топология работает в производственной среде более 6 лет.

HTTPServer:8080 --> 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 для определения сопоставления веб-приложения).