]> git.kaiwu.me - nginx.git/commitdiff
HTTP/2: client_header_timeout before first request (ticket #2142).
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 1 Mar 2021 14:31:28 +0000 (17:31 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 1 Mar 2021 14:31:28 +0000 (17:31 +0300)
With this change, behaviour of HTTP/2 becomes even closer to HTTP/1.x,
and client_header_timeout instead of keepalive_timeout is used before
the first request is received.

This fixes HTTP/2 connections being closed even before the first request
if "keepalive_timeout 0;" was used in the configuration; the problem
appeared in f790816a0e87 (1.19.7).

src/http/v2/ngx_http_v2.c

index a5952849468180da28355e084004fb565d7000de..005db0b8e98269488dad00650bb8fdd49825b7ed 100644 (file)
@@ -238,6 +238,7 @@ ngx_http_v2_init(ngx_event_t *rev)
     ngx_http_v2_srv_conf_t    *h2scf;
     ngx_http_v2_main_conf_t   *h2mcf;
     ngx_http_v2_connection_t  *h2c;
+    ngx_http_core_srv_conf_t  *cscf;
 
     c = rev->data;
     hc = c->data;
@@ -325,8 +326,10 @@ ngx_http_v2_init(ngx_event_t *rev)
     rev->handler = ngx_http_v2_read_handler;
     c->write->handler = ngx_http_v2_write_handler;
 
-    if (c->read->timer_set) {
-        ngx_del_timer(c->read);
+    if (!rev->timer_set) {
+        cscf = ngx_http_get_module_srv_conf(hc->conf_ctx,
+                                            ngx_http_core_module);
+        ngx_add_timer(rev, cscf->client_header_timeout);
     }
 
     c->idle = 1;