mirror of
https://github.com/nginx/nginx.git
synced 2025-01-06 22:23:00 -06:00
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
This commit is contained in:
parent
384a8d8dfb
commit
2485681308
@ -172,6 +172,7 @@ struct ngx_connection_s {
|
|||||||
unsigned timedout:1;
|
unsigned timedout:1;
|
||||||
unsigned error:1;
|
unsigned error:1;
|
||||||
unsigned destroyed:1;
|
unsigned destroyed:1;
|
||||||
|
unsigned pipeline:1;
|
||||||
|
|
||||||
unsigned idle:1;
|
unsigned idle:1;
|
||||||
unsigned reusable:1;
|
unsigned reusable:1;
|
||||||
|
@ -2753,7 +2753,8 @@ ngx_http_finalize_connection(ngx_http_request_t *r)
|
|||||||
|| (clcf->lingering_close == NGX_HTTP_LINGERING_ON
|
|| (clcf->lingering_close == NGX_HTTP_LINGERING_ON
|
||||||
&& (r->lingering_close
|
&& (r->lingering_close
|
||||||
|| r->header_in->pos < r->header_in->last
|
|| r->header_in->pos < r->header_in->last
|
||||||
|| r->connection->read->ready)))
|
|| r->connection->read->ready
|
||||||
|
|| r->connection->pipeline)))
|
||||||
{
|
{
|
||||||
ngx_http_set_lingering_close(r->connection);
|
ngx_http_set_lingering_close(r->connection);
|
||||||
return;
|
return;
|
||||||
@ -3123,6 +3124,7 @@ ngx_http_set_keepalive(ngx_http_request_t *r)
|
|||||||
|
|
||||||
c->sent = 0;
|
c->sent = 0;
|
||||||
c->destroyed = 0;
|
c->destroyed = 0;
|
||||||
|
c->pipeline = 1;
|
||||||
|
|
||||||
if (rev->timer_set) {
|
if (rev->timer_set) {
|
||||||
ngx_del_timer(rev);
|
ngx_del_timer(rev);
|
||||||
|
Loading…
Reference in New Issue
Block a user