ginx общается с backend’ом по http1.0, а в нем нет keepalive.
Keep-Alive в HTTP/1.0 есть, только по умолчанию не используется. https://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 протокола.
Просмотров: 1970