У меня есть сервлет 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;charset=UTF-8

User-Agent: Java/1.6.0_25

Host: testserver.co.uk:61061

Accept: text/html, image/gif, image/jpeg, *; q=.2, /; q=.2

Connection: keep-alive

Content-Length: 11

id=1-134ISR

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

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

HTTP/1.1 200 OK

Server: Sun-ONE-Web-Server/6.1

Date: Tue, 08 Jan 2013 17:48:49 GMT

Content-type: text/html

Transfer-encoding: chunked

03a6


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

[09/Jan/2013:10:25:33] fine (16359): for host 10.232.191.87 trying to GET /aricp/ari, ntrans-j2ee reports: mapped uri "/ari" in context "/aricp" to resource "ARI"

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

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

Ошибка HTTP-запроса ZEUS

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

Content-Type: application/x-www-form-urlencoded;charset=UTF-8

User-Agent: Java/1.6.0_25

Host: zeus.co.uk:61061

Accept: text/html, image/gif, image/jpeg, *; q=.2, /; q=.2

Connection: keep-alive

Content-Length: 11

id=1-PUZK7D

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

HTTP/1.1 404 Not found

Server: Sun-ONE-Web-Server/6.1

Date: Tue, 08 Jan 2013 18:05:45 GMT

Content-length: 292

Content-type: text/html

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

ZEUS Failed HTTP Request Server Log

[09/Jan/2013:10:50:45] warning (16886): for host 10.232.184.53 trying to GET /aricp/ari, send-file reports: HTTP4142: can't find /u02/SunONE61060/docs/aricp/ari (File not found)

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

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


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

  • Удаление списка контроля доступа, чтобы убедиться, что доступ не был ограничен
  • Обновление сервлета и виртуального сервера
  • Освежающий ЗЕВС
  • Перезапуск веб-сервера Sun One
  • Переустановка сервлета на виртуальном сервере

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

Client --> Server

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

Client --ZEUS --> Server

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

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

answer

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

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

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