соединение зависает при очень странных условиях.
Igor Sysoev
is at rambler-co.ru
Sat Dec 29 10:25:25 MSK 2007
On Sat, Dec 29, 2007 at 09:56:46AM +0300, Arkadiy Kulev wrote:
> Здравствуйте,
>
> ОЧЕНЬ странное происходит с 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...
> Помогите, люди добрые...
В моих тестах 180 и 190 работают, 200 - висит:
>nc elite.ru 190
nc elite.ru 180
GET /article_image.php?image_id=27839&folder=article_images&w=c40 HTTP/1.0
HTTP/1.1 302 Moved Temporarily
Server: nginx/0.6.24
Date: Sat, 29 Dec 2007 07:23:00 GMT
Content-Type: text/html
Content-Length: 161
Connection: close
Location: http://gallery.ru/article_image.php?image_id=27839&folder=article_images&w=c40?image_id=27839&folder=article_images&w=c40
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/0.6.24</center>
</body>
</html>
>nc elite.ru 190
GET /article_image.php?image_id=27839&folder=article_images&w=c40 HTTP/1.0
HTTP/1.1 302 Moved Temporarily
Server: nginx/0.6.24
Date: Sat, 29 Dec 2007 07:23:46 GMT
Content-Type: text/html
Content-Length: 161
Connection: close
Location: http://gallery.ru/article_image.php?image_id=27839&folder=article_images&w=c40?image_id=27839&folder=article_images&w=c40
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/0.6.24</center>
</body>
</html>
>nc elite.ru 190
nc elite.ru 200
GET /article_image.php?image_id=27839&folder=article_images&w=c40 HTTP/1.0
^C
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx-ru
mailing list