nginx as reverse proxy for weblogic

teo nginx-forum at nginx.us
Sun Jan 27 07:45:21 UTC 2013


Была мысль заменить связку apache+ webllogic-plugin на nginx. Но сколько раз
не пробовал - все равно родной плагин работает лучше.
Неужели nginx за столько времени не додумался до того, что 10 лет назад
сделали в BEA?

Сейчас я пробую вот такую конфигурацию

upstream web_backend {
    ip_hash;
    least_conn;
    server 192.168.2.11:7001;
    server 192.168.2.12:7001;
    server 192.168.2.13:7001;
}

    location / {
	proxy_pass	http://web_backend;
	proxy_http_version 1.1;
	proxy_set_header WL-Proxy-Client-IP $remote_addr;
	proxy_set_header Proxy-Client-IP $remote_addr;
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_read_timeout 600;
	proxy_send_timeout 1;
    }

Результат - да, все работает только до определенного момента (секунд этак
30). Видно что все запросы валятся на один инстанс weblogic, забивают все
его очереди и в результате все висит. 
Т.е. почему нет заявленного round-robin и когда nginx решит переключиться на
другой инстанс - не известно.
Впрочем я конечно не уверен что все происходит именно так, но факты такие -
через некоторое время консоль управления подвисает - это происходит обычно
тогда, когда один из инстансов тупо не отвечает ни на какие запросы. Далее
nodeManager, видя что его инстанс не отвечает - валит его и запускает
вновь.
Если консоль все-таки ответила, то видно что кол-во конектов на этих 3х
инстансах распределено примерно так 10+1200+10.

Почему же этого не происходит при родном плагине?
Во 1х плагин постоянно тестирует инстансы, посылая запрос на несуществующую
страничку и при этом его цель не получить какой-то конкретный ответ, а
просто увидеть что инстанс жив, даже если это ответ 404. И заодно оценить
насколько тот занят - если задержка велика - значит надо выбрать другой.
А тестировать инстанс пришедшим запросом - а вдруг это поисковый запрос,
который требует много ресурсов и ответ будет долгим?
Кстати в параметрах настройки плагина нет таймаутов - т.е. если вы будете
вытаскивать 20гиговый файл, то вас не срубят на 10й минуте.
Во 2х, он добавляет куки в ответ инстанса, с тем, чтобы знать на каком
конкретно сервере исполнялся предыдущий запрос.
При этом никакие циски с NAT и диапазоном IP адресов уже не страшны (это
когда каждый конект идет через другой адрес) - он заботится о том, чтобы
инстансу было легче доставать сессию клиента.
В 3х плагин поддерживает keep_alive со стороны инстанса.

Так может все-таки добавить такие фичи в ngx_http_proxy_module?
Или я что-то пропустил и кто-то знает решение с имеющимся функционалом?
Версии в которых это пробовал я - 1.0.15 из epel и 1.2.6.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,235603,235603#msg-235603



Подробная информация о списке рассылки nginx-ru