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