changeset 8555:8b6486f0fe79 quic

QUIC: switch stream context to a server selected by SNI. 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.
author Roman Arutyunyan <arut@nginx.com>
date Tue, 29 Sep 2020 22:09:09 +0100
parents 2885cd81adb3
children b383120afca3
files src/http/ngx_http_request.c
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -305,8 +305,10 @@ ngx_http_init_connection(ngx_connection_
 #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_
             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