ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

соединение зависает при очень странных условиях.


  • To: nginx-ru@xxxxxxxxx
  • Subject: соединение зависает при очень странных условиях.
  • From: Arkadiy Kulev <eth@xxxxxxxxxxxx>
  • Date: Sat, 29 Dec 2007 09:56:46 +0300

Здравствуйте,

ОЧЕНЬ странное происходит с nginx при определенных условиях.
У меня стоит кластер - одна главная машина - и много подчиненных.
Главная машина (сервер-балансировщик) через lvs-NAT и keepalived
(89.188.102.66:180) распределяет запросы по подчиненным (10.0.0.10-20:80).

На одну из подчиненных машин (10.0.0.12:80) поставил freebsd 6.2 и поставил 
nginx.
На ней же стоит и php через fastcgi.

Стал замечать странную особенность, при запросе маленьких файлов (1-2
кб) через мою php программу-обработчик, загрузка "подвисает" - грубо
говоря браузер полностью получает файл, но канал не закрывается, пример:
http://elite.ru:180/article_image.php?image_id=27839&folder=article_images&w=c40
На крупных файлах (больше 5k) все в порядке:
http://elite.ru:180/article_image.php?image_id=27839&folder=article_images&w=500
(два примерах сверху отдаются через keepalived 89.188.102.66:180).

НО!!!
Стоит мне настроить на сервере-балансировщике (89.188.102.66) прямой
линк (без keepalived, через простую программку balance), так проблема сразу
исчезает.
Попробуйте теперь эту ссылку (тот же nginx внутри 10.0.0.12:80, но на другом 
внешнем
порту 89.188.102.66:190):
http://elite.ru:190/article_image.php?image_id=27839&folder=article_images&w=c40
изображение загружается и все в порядке.

Подумал, что проблема в lvs и keepalived. Немного ликбеза - данная
связка позволяет создать на базе линукса виртуальный load balancer,
который сам не принимает соединения, а перенаправляет их на подчиненные
сервера. Прелесть в том, что сервера с собственными внутренними
адресами (10.0.0.10-20) видят запросы якобы от
реальных внешних IP адресов (будто к ним посетители обращаются напрямую), но 
когда
они отвечают, то шлюз keepalived исправляетвозвращаемые пакеты (заменяет
отправителя 10.0.0.10-20 на свой собственный адрес 89.188.102.66).

Но к сожалению, оказалось что нет. Я поднял на том же сервере
lighttpd (10.0.0.12:88) и сделал для него отдельную запись в
keepalived сервера-балансировщика (89.188.102.66:200). И ссылка работает 
нормально.

Пример:
http://elite.ru:200/article_image.php?image_id=27839&folder=article_images&w=c40

Для nginx и lighttpd в обоих случаях используется один и тот же
fastcgi, поэтому проблема не в php.

Следовательно, методом дедукции делаю предположение, что проблема в nginx...
Помогите, люди добрые...


Arkadiy Kulev                         mailto:eth@xxxxxxxxxxxx
ICQ 17107076
MSN arca@xxxxxxx
Skype arkadiynight

+7 495 1300279
Moscow, Russia




 




Copyright © Lexa Software, 1996-2009.