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

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

  • HTTPServer - IBM HTTPD Сервер v?
  • WASServer6.1 - WebSphere Application Server v6.1 (работает приложение "A")

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

HTTPServer:8080 --> WASServer6.1:9081

Теперь нам нужно адаптироваться к этим новым вещам, несколько изменив топологию:

  • IHSServer - IBM HTTPD Сервер v? (новее, чем выше)
  • WASServer8.5 - Сервер приложений WebSphere v8.5.5 (работает приложение "B")
  • 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 список виртуальных хостов в 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 заботится о порте прослушивания вышестоящего веб-сервера?

2 ответа

Возможно, вам также понадобится добавить псевдоним виртуального хоста. VirtualHost Name="*:8080" в WASServer8.5 тоже. Затем перезапустите сервер WAS 8.5, чтобы изменения вступили в силу.

Как правило, вам необходимо настроить виртуальный хост (*:8080) на всех уровнях, от конф. IHS до подключаемого модуля WAS и виртуальных хостов WAS.

Я не видел "ProxyPreserveHost" в вашем посте. Ты это пробовал?

Мне кажется, что это вероятная причина для 404, сгенерированного сервером IHS на порту 8081 (из-за несоответствия в plugin-cfg.xml и обработанного как статический файл) или самим AppServer (когда он проверяет свое собственное понятие хоста) псевдонимы для определения отображения веб-приложения).

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