nginx as reverse proxy for weblogic

Валентин Бартенев vbart at nginx.com
Sun Jan 27 13:58:06 UTC 2013


On Sunday 27 January 2013 11:45:21 teo wrote:
> Была мысль заменить связку 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 решит переключиться
> на другой инстанс - не известно.

Вы его выключили указав ip_hash.

> Впрочем я конечно не уверен что все происходит именно так, но факты такие -
> через некоторое время консоль управления подвисает - это происходит обычно
> тогда, когда один из инстансов тупо не отвечает ни на какие запросы. Далее
> nodeManager, видя что его инстанс не отвечает - валит его и запускает
> вновь.
> Если консоль все-таки ответила, то видно что кол-во конектов на этих 3х
> инстансах распределено примерно так 10+1200+10.
> 
> Почему же этого не происходит при родном плагине?
> Во 1х плагин постоянно тестирует инстансы, посылая запрос на несуществующую
> страничку и при этом его цель не получить какой-то конкретный ответ, а
> просто увидеть что инстанс жив, даже если это ответ 404. И заодно оценить
> насколько тот занят - если задержка велика - значит надо выбрать другой.
> А тестировать инстанс пришедшим запросом - а вдруг это поисковый запрос,
> который требует много ресурсов и ответ будет долгим?

Распространенная ситуация - интервал поступления запросов меньше интервала 
ответа, в этом случае любые дополнительные запросы "для тестирования" только 
создают дополнительную нагрузку, не принося никакой пользы.

> Кстати в параметрах настройки плагина нет таймаутов - т.е. если вы будете
> вытаскивать 20гиговый файл, то вас не срубят на 10й минуте.

nginx тоже не срубят, если файл действительно будет "вытаскиваться", а
не 10 минут висеть. Обратите внимание, многие таймауты задаются на интервалы 
между двумя последовательными операциями, а не на весь ответ целиком.

> Во 2х, он добавляет куки в ответ инстанса, с тем, чтобы знать на каком
> конкретно сервере исполнялся предыдущий запрос.
> При этом никакие циски с NAT и диапазоном IP адресов уже не страшны (это
> когда каждый конект идет через другой адрес) - он заботится о том, чтобы
> инстансу было легче доставать сессию клиента.

Это другой метод балансировки, который на данный момент не доступен в бесплатной 
версии nginx.

> В 3х плагин поддерживает keep_alive со стороны инстанса.
> 

Nginx поддерживает keepalive начиная с версии 1.1.4.

http://nginx.org/r/keepalive/ru

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

--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html


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