Welcome! Log In Create A New Profile

Advanced

Re: keepalive upstream

Francis Daly
October 16, 2016 04:42AM
On Sat, Oct 15, 2016 at 05:20:42AM -0700, Grant wrote:

Hi there,

> > I've been struggling with a very difficult to diagnose problem when
> > using apache2 and Odoo in a reverse proxy configuration with nginx.
> > Enabling keepalive for upstream in nginx seems to have fixed it. Why
> > is it not enabled upstream by default as it is downstream?
>
> Does anyone know why this isn't a default?

My guess?

Historical reasons and consistency.

proxy_pass from nginx to upstream was HTTP/1.0, which default assumes
"Connection: close" unless the client explicitly says otherwise. And
(without checking) I guess that nginx was explicit about "close".

Then the option of proxy_http_version came about, which would allow you
take advantage of some extra features if you know that your upstream
uses them.

Arguably, "proxy_http_version 1.1" should imply "Connection: keep-alive"
if not explicitly overridden, but (again, my guess) it was cleaner and
simpler to make the minimum changes when adding support for the new
client http version, and the upstream server must be able to handle
"Connection: close".

If you want close, keep-alive, upgrade, or something else, you can add
it yourself. nginx has to pick one to use if none is specified, and it
looks like it picked the one that was already its default. Principle of
Least Surprise, for current users.


On the "downstream" side, nginx is a http/1.1 (or 2) server. If the
client connects using http/1.0, nginx will respond with "Connection:
close" unless the client said otherwise. If the client connects using
http/1.1, nginx will respond with "Connection: keep-alive" unless the
client said otherwise. That's the http server-side rules.


Also, I guess that nginx generally assumes that the things that it talks
to are correct. I'm not sure, but it sounds like you are reporting that
some combination of things that is your upstream was receiving whatever
http request nginx was making, and was responding in a way that nginx
was not expecting. If some part of that sequence was breaking the http
request/response rules, it would be good to know so that it could be fixed
in the right place.

Naively, it sounds like your upstream was taking the nginx "Connection:
close" part of the request and ignoring it. If that is the case, your
upstream is wrong and should be fixed, independent of whatever nginx does.

f
--
Francis Daly francis@daoine.org

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

keepalive upstream

Grant September 30, 2016 09:16PM

Re: keepalive upstream

Grant October 15, 2016 08:22AM

Re: keepalive upstream

Francis Daly October 16, 2016 04:42AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 178
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready