Re: Fwd: Nginx при обновлении большого числа пакетов APT

Maxim Dounin mdounin на mdounin.ru
Пт Июл 29 13:04:39 UTC 2011


Hello!

On Fri, Jul 29, 2011 at 04:41:39PM +0400, Evgeny Sinelnikov wrote:

> 29 июля 2011 г. 16:24 пользователь Maxim Dounin <mdounin at mdounin.ru> написал:
> > Hello!
> >
> > On Fri, Jul 29, 2011 at 03:00:45PM +0400, Evgeny Sinelnikov wrote:
> >
> >> Кстати, связка "lingering_close always" и "lingering_timeout 0"
> >> приводит к ещё более страшным последствиям... ;)
> >
> > Всмысле?
> 
> Ну, вроде ожидание включено, а таймаут равен нулю. Противоречивая пара настроек.

Начинает ожидать (и даже вычитывает из сокета, если есть что), но 
сразу за этим срабатывает таймаут.  Тут я проблем не вижу, 
наоборот - предыдущий подход с lingering_timeout 0 отключающим 
lingering мне кажется странным.

Вопрос был именно о том, к каким "более страшным последствиям" это 
приводит.

> > В сочетании с reset_timedout_connection могут быть неприятные эффекты - будет
> > закрывать соединения с RST, ибо таймаут истекает сразу.  Впрочем, то же будет
> > иметь место и при не-нулевом таймауте.  Наверное имеет смысл ещё вот такой
> > патч:
> >
> > diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
> > --- a/src/http/ngx_http_request.c
> > +++ b/src/http/ngx_http_request.c
> > @@ -2779,7 +2786,6 @@ ngx_http_lingering_close_handler(ngx_eve
> >                    "http lingering close handler");
> >
> >     if (rev->timedout) {
> > -        c->timedout = 1;
> >         ngx_http_close_request(r, 0);
> >         return;
> >     }
> >
> 
> Это я сегодня проверить уже не успею... Каковы условия проверки, тоже
> не совсем понял. "reset_timedout_connection on" и "lingering_timeout
> 0" без этого патча может может себя вести не корректно, так?

При и "reset_timedout_connection on;" соединение закрывается с RST 
если использовался lingering close и истёк lingering_timeout.  
Проблема как раз должна хорошо воспроизводится при использовании

    reset_timedout_connection on;
    lingering_close always;
    lingering_timeout 0;

в конфиге (собственно, я предполагаю что под "более страшными 
последствиями" выше имеется ввиду именно эта проблема).

Патч отключает reset_timedout_connection если таймаут случился при 
lingering close, т.е. проблема должна перестать воспроизводится.

Maxim Dounin



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