Re: 1.0.4 неприятности с keepalive_timeout

Maxim Dounin mdounin на mdounin.ru
Ср Июн 15 23:16:50 MSD 2011


Hello!

On Wed, Jun 15, 2011 at 04:20:26PM +0400, sad at bankir.ru wrote:

> саму неприятность описать сложно, она очень загадочно выглядит.
> скажем первый симптом: "если тупо жать кнопку reload в браузере то на каждый второй запрос nginx не отвечает"
> 
> оказывается что фигня происходит ЕСЛИ запрос отправить до истечения keepalive-timeout.
> после истечения всё раб как надо.
> 
> проблема полностью лечится keepalive-timeout 0;
> 
> в ответ на "проблемный" запрос nginx молчит ровно keepalive-timeout времени.
> а затем выплёвывает нечто вроде:
> 
> 0
> 
> HTTP/1.1 200 OK
> Server: nginx/1.0.4
> Date: Wed, 15 Jun 2011 12:05:54 GMT
> Content-Type: text/plain; charset=utf-8
> Transfer-Encoding: chunked
> Connection: keep-alive
> 
> 22
> exactly-the-expected-body
> 0
> 
> 0
> 
> тоесть заголовки прямо в теле и тело очень смахивает на chunked.
> 
> проблему я встретил при изпользовании модуля ngx_postgres,
> а при отдаче статики проблему возпроизвести не удалось.
> тем не менее я думаю что эта проблема не специфична для postgres module
> может быть её можно воспроизвести с другими upstream...

Судя по всему, проблема именно в ngx_postgres: он видимо ставит на 
буфер флаг last_buf, а не должен.  Это приводит к двум final 
chunk'ам (см. выше - CRLF "0" CRLF CRLF), что ломает протокол и 
соответственно keepalive не может нормально работать.

Maxim Dounin



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