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

Arkadiy Kulev eth at ethaniel.com
Sat Dec 29 09:56:46 MSK 2007


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

ОЧЕНЬ странное происходит с 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 at ethaniel.com
ICQ 17107076
MSN arca at mail.ru
Skype arkadiynight

+7 495 1300279
Moscow, Russia






More information about the nginx-ru mailing list