]> git.kaiwu.me - nginx.git/commitdiff
QUIC: switch stream context to a server selected by SNI.
authorRoman Arutyunyan <arut@nginx.com>
Tue, 29 Sep 2020 21:09:09 +0000 (22:09 +0100)
committerRoman Arutyunyan <arut@nginx.com>
Tue, 29 Sep 2020 21:09:09 +0000 (22:09 +0100)
Previously the default server configuration context was used until the
:authority or host header was parsed.  This led to using the configuration
parameters like client_header_buffer_size or request_pool_size from the default
server rather than from the server selected by SNI.

Also, the switch to the right server log is implemented.  This issue manifested
itself as QUIC stream being logged to the default server log until :authority
or host is parsed.

src/http/ngx_http_request.c

index f1c6fa45c1241eda27c6c1baf3fa7c131c8f642a..2a8a22564298c8b5ee7dced9c3229c184746a485 100644 (file)
@@ -305,8 +305,10 @@ ngx_http_init_connection(ngx_connection_t *c)
 #if (NGX_HTTP_QUIC)
 
     if (hc->addr_conf->quic) {
-        ngx_quic_conf_t          *qcf;
-        ngx_http_ssl_srv_conf_t  *sscf;
+        ngx_quic_conf_t           *qcf;
+        ngx_http_connection_t     *phc;
+        ngx_http_ssl_srv_conf_t   *sscf;
+        ngx_http_core_loc_conf_t  *clcf;
 
         hc->ssl = 1;
 
@@ -340,6 +342,17 @@ ngx_http_init_connection(ngx_connection_t *c)
             ngx_quic_run(c, &sscf->ssl, qcf);
             return;
         }
+
+        phc = c->qs->parent->data;
+
+        if (phc->ssl_servername) {
+            hc->ssl_servername = phc->ssl_servername;
+            hc->conf_ctx = phc->conf_ctx;
+
+            clcf = ngx_http_get_module_loc_conf(hc->conf_ctx,
+                                                ngx_http_core_module);
+            ngx_set_connection_log(c, clcf->error_log);
+        }
     }
 
 #endif