Re: Keepalive у apache, нужен ли?

Gena Makhomed gmm at csdoc.com
Mon Sep 22 16:16:53 MSD 2008


On Monday, September 22, 2008 at 12:01:44, Никита Козлов wrote:

НК> Nginx общается с backend'ом по http1.0, а в нем нет keepalive.

Keep-Alive в HTTP/1.0 есть, только по умолчанию не используется.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.6.2
Persistent connections in HTTP/1.0 are explicitly
negotiated as they are not the default behavior.

для получения Keep-Alive connection по протоколу HTTP/1.0
надо явно его запросить у сервера через Connection: Keep-Alive

ВВ> И я правильно понял тогда, что если между nginx и apache keepalive
ВВ> быть не может, то можно в апаче смело выключить keepalive?

да, можно смело выключать, потому что keepalive connection
между nginx и apache сейчас не поддерживается в nginx, AFAIU.

если apache настроент нормально - Keep-Alive между nginx и apache
быть не должно, даже если у apache присутствует поддержка Keep-Alive,
потому что протокол HTTP/1.0 и нет явного запроса на Keep-Alive соединение
и даже более того, nginx посылает apache заголовок Connection: close - это означает
отсутствие Keep-Alive даже если backend проинтерпретирует запрос nginx`а как HTTP/1.1

интерпретации HTTP/1.0 запроса по протоколу HTTP/1.1 быть не должно, если backend
не глючный, поэтому в идеале даже строка Connection: close в заголовке избыточна.

тем не менее, RFC явно разрешают на запрос по протоколу HTTP/1.0 давать
ответ по протоколу HTTP/1.1, потому что major номер версии не меняется,
а только minor: "the minor version labels the capability of the sender,
not the interpretation of the message". [RFC 2145]. там же далее:

 HTTP/1.0 clients cannot be expected to understand chunked encodings,
 and so an HTTP/1.1 server must never send "Transfer-Encoding: chunked"
 in response to an HTTP/1.0 request.

если apache присылает ответ в "Transfer-Encoding: chunked"
- он не соответствует стандарту, или некорректно настроен.

возможно, некоторые http-сервера включают "Transfer-Encoding: chunked"
потому что считают, что клиент понимает HTTP/1.1, поскольку они видят
в запросе заголовок Connection: close который отсутствует в HTTP/1.0,
и есть только в протоколе HTTP/1.1? (хотя этим они явно нарушают RFC)

PS может быть мне просто повезло, но Apache 2.2.x в качестве
backend`а работает с nginx без глюков в плане http протокола.

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list