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