]> git.kaiwu.me - nginx.git/commit
Lingering close for connections with pipelined requests.
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 2 Feb 2023 20:38:48 +0000 (23:38 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 2 Feb 2023 20:38:48 +0000 (23:38 +0300)
commit2485681308bd8d3108da31546cb91bb97813a3fb
treeaf077d3c55d14d356973707942b7bbb859c37f9c
parent384a8d8dfbf817b98715e8ed5ec7bf3cb545d501
Lingering close for connections with pipelined requests.

This is expected to help with clients using pipelining with some constant
depth, such as apt[1][2].

When downloading many resources, apt uses pipelining with some constant
depth, a number of requests in flight.  This essentially means that after
receiving a response it sends an additional request to the server, and
this can result in requests arriving to the server at any time.  Further,
additional requests are sent one-by-one, and can be easily seen as such
(neither as pipelined, nor followed by pipelined requests).

The only safe approach to close such connections (for example, when
keepalive_requests is reached) is with lingering.  To do so, now nginx
monitors if pipelining was used on the connection, and if it was, closes
the connection with lingering.

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973861#10
[2] https://mailman.nginx.org/pipermail/nginx-devel/2023-January/ZA2SP5SJU55LHEBCJMFDB2AZVELRLTHI.html
src/core/ngx_connection.h
src/http/ngx_http_request.c