uWSGI – Understanding uwsgi_socket_keepalive Effect

nginxuwsgi

I was looking at some options to optimize for nginx with a uwsgi upstream and noticed that at the end of the entry for keepalive the docs say:

SCGI and uwsgi protocols do not have a notion of keepalive connections

but there a parameter named uwsgi_socket_keepalive where the docs talk about keepalive timeout for the socket. I'm confused by this because afaik when using uwsgi socket, we default to using the uwsgi protocol. Does this imply this parameter (as well as other keepalive related parameters) are simply ignored when using the uwsgi protocol ?

Best Answer

These refer to two completely different things.

The keepalive parameter for an upstream refers to how long to keep a reusable connection open after serving a request. Some types of connections (e.g. HTTP, FastCGI) can service multiple requests on a single open connection, without closing and reopening it.

The directive uwsgi_socket_keepalive refers specifically to the TCP keepalive feature, which detects whether an open, idle connection is still alive. Though in practice, this really doesn't make a lot of sense, as a uwsgi connection isn't reusable and so it gets closed and a new connection opened with every request; it wouldn't remain idle for any significant amount of time in normal operation.