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