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

ZEUS ZXTM прерывает HTTP-запрос к сервлету Java HTTP 404?

У меня есть сервлет Java под названием «ARI», который извлекает данные из архивной базы данных и возвращает полезную нагрузку XML со строками из этой базы данных.

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

testserver.co.uk:61061/aricp/ari

testserver.co.uk:61062/aricp/ari

К обоим этим сервлетам можно успешно получить доступ непосредственно с клиента. Вот пример разговора между клиентом и сервером, полученный при захвате пакетов.

Успешный HTTP-запрос:

POST / aricp / ari HTTP / 1.1 Accept-Charset: UTF-8

Content-Type: application / x-www-form-urlencoded; кодировка = UTF-8

Пользовательский агент: Java / 1.6.0_25

Хост: testserver.co.uk:61061

Принять: text / html, image / gif, image / jpeg, *; q = .2, /; q = .2

Подключение: keep-alive

Длина содержимого: 11

id = 1-134ISR

обратите внимание на переменную POST "id" в запросе

Успешный ответ

HTTP / 1.1 200 ОК

Сервер: Sun-ONE-Web-Server / 6.1

Дата: Вт, 8 января 2013 г., 17:48:49 GMT

Тип содержимого: текст / html

Передача-кодирование: фрагментированное

03a6


* Успешный журнал сервера HTTP-запросов *

[09 / Янв / 2013: 10: 25: 33] нормально (16359): для хоста 10.232.191.87, пытающегося GET / aricp / ari, ntrans-j2ee сообщает: сопоставлен uri "/ ari" в контексте "/ aricp" на ресурс «АРИ»

Так что отправлять прямые запросы на наш сервлет можно, однако, если мы используем ZEUS ZXTM для косвенной обработки запросов от клиента ко всем экземплярам нашего сервлета, это не сработает.

Вот неудавшийся HTTP-запрос, обратите внимание на разницу в адресе HOST, поскольку ZEUS является посредником.

ZEUS Failed HTTP-запрос

POST / aricp / ari HTTP / 1.1 Accept-Charset: UTF-8

Content-Type: application / x-www-form-urlencoded; кодировка = UTF-8

Пользовательский агент: Java / 1.6.0_25

Хост: zeus.co.uk:61061

Принять: text / html, image / gif, image / jpeg, *; q = .2, /; q = .2

Подключение: keep-alive

Длина содержимого: 11

id = 1-PUZK7D

Ошибка HTTP-ответа ZEUS

HTTP / 1.1 404 Не найдено

Сервер: Sun-ONE-Web-Server / 6.1

Дата: Вт, 8 января 2013 г., 18:05:45 GMT

Длина содержимого: 292

Тип содержимого: текст / html

При использовании ZEUS веб-сервер не может интерпретировать запрос, исходящий от ZEUS, как запрос сервлета, вместо этого он, кажется, буквально интерпретирует URI запроса как путь к файлу, и мы получаем 404 not found.

ZEUS Failed HTTP Request Server Log

[09 / Янв / 2013: 10: 50: 45] предупреждение (16886): для хоста 10.232.184.53, пытающегося получить / aricp / ari, отчеты об отправке файла: HTTP4142: не удается найти / u02 / SunONE61060 / docs / aricp / ari (файл не найден)

Как вы можете видеть, он рассматривает uri как путь к каталогу, а не как путь к приложению.

Это очень странная проблема.


Вещи, которые я пробовал

Таким образом, он работает нормально так:

Клиент -> Сервер

Однако при этом он не работает:

Клиент --ZEUS -> Сервер

Я собираюсь обновить установку нового виртуального сервера и посмотреть, что произойдет.

Любые идеи или теории приветствуются.

Я не уверен, почему у вас только один внутренний сервер, возможно, это всего лишь тестовая установка.
ZXTM - мощный балансировщик нагрузки, кажется, вы сейчас более или менее используете его в качестве обратного прокси.

В любом случае, вы обычно устанавливаете что-то вроде этого:
- создать запись DNS, например myapp.example.com и укажите его на IP-адрес кластера ZXTM
- настроить серверное приложение для прослушивания myapp.example.com
- создать виртуальный сервер в кластере ZXTM, который использует IP трафика
- создать новый пул в кластере ZXTM и добавить testserver.co.uk:61061 к этому
- назначить новый пул созданному виртуальному серверу

Затем вы можете получить доступ к своему приложению через myapp.example.com.
Вы по-прежнему можете получить доступ к приложению непосредственно на внутренних узлах (например, для целей мониторинга), но в зависимости от того, как работает приложение, вам может потребоваться настроить для этого заголовок Host.