Hi, I'm looking into the same issue; how to improve graceful shutdown when using keep-alive connections.
It seems nginx at some point had support for doing graceful shutdown (if i read the code correctly): http://hg.nginx.org/nginx/rev/03f1133f24e8 But it was removed at a later stage: http://hg.nginx.org/nginx/rev/5e6142609e48 The feature was removed due to negative impact on CPU usage, maybe the process could be handled in ngx_http_finalize_connection(ngx_http_request_t *r) ? That may be a better option as it should only trigger when ngx_terminate and ngx_quit flags are active: diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index 2a0528c6..0b8e05fa 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -2735,6 +2735,15 @@ ngx_http_finalize_connection(ngx_http_request_t *r) return; } + if (ngx_terminate + || ngx_quit + && r->keepalive) + { + r->keepalive = 0; + ngx_http_close_request(r, 0); + return; + } + if (clcf->lingering_close == NGX_HTTP_LINGERING_ALWAYS || (clcf->lingering_close == NGX_HTTP_LINGERING_ON && (r->lingering_close Does this seem something that could work ? One other option could be to expand the function ngx_close_idle_connections(ngx_cycle_t *cycle) to check if the connection is using keepalive, if so, set keeplive to 0. I believe that would ensure that during graceful shutdown, an keepalive connection would be able to perform one request, then asked to close the connection: diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index c082d0da..df90c4f1 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -1334,8 +1334,10 @@ ngx_close_idle_connections(ngx_cycle_t *cycle) { ngx_uint_t i; ngx_connection_t *c; + ngx_http_request_t *r; c = cycle->connections; + r = cycle-> for (i = 0; i < cycle->connection_n; i++) { @@ -1345,6 +1347,11 @@ ngx_close_idle_connections(ngx_cycle_t *cycle) c[i].close = 1; c[i].read->handler(c[i].read); } + + if (r->keepalive) { + r->keepalive = 0; + } + } } I understand that the second example is not a fully working example. Posted at Nginx Forum: https://forum.nginx.org/read.php?2,197927,289673#msg-289673 _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx