[PATCH 1 of 3] HTTP/3: "quic" parameter of "listen" directive

Maxim Dounin mdounin at mdounin.ru
Tue Feb 7 03:12:01 UTC 2023


Hello!

On Wed, Feb 01, 2023 at 06:01:08PM +0400, Roman Arutyunyan wrote:

> # HG changeset patch
> # User Roman Arutyunyan <arut at nginx.com>
> # Date 1675254688 -14400
> #      Wed Feb 01 16:31:28 2023 +0400
> # Branch quic
> # Node ID 2fcc1c60be1c89aad5464bcc06f1189d1adc885a
> # Parent  def8e398d7c50131f8dac844814fff729da5c86c
> HTTP/3: "quic" parameter of "listen" directive.
> 
> Now "listen" directve has a new "quic" parameter which enables QUIC protocol
> for the address.  Further, to enable HTTP/3, a new directive "http3" is
> introduced.  The hq-interop protocol is enabled by "http3_hq" as before.
> Now application protocol is chosen by ALPN.
> 
> Previously used "http3" parameter of "listen" is deprecated.
> 
> diff --git a/README b/README
> --- a/README
> +++ b/README
> @@ -93,13 +93,13 @@ 2. Installing
>  
>  3. Configuration
>  
> -    The HTTP "listen" directive got a new option "http3" which enables
> -    HTTP/3 over QUIC on the specified port.
> +    The HTTP "listen" directive got a new option "quic" which enables
> +    QUIC as client transport protocol instead of TCP.
>  
>      The Stream "listen" directive got a new option "quic" which enables
>      QUIC as client transport protocol instead of TCP or plain UDP.
>  
> -    Along with "http3" or "quic", it's also possible to specify "reuseport"
> +    Along with "quic", it's also possible to specify "reuseport"
>      option [8] to make it work properly with multiple workers.
>  
>      To enable address validation:
> @@ -133,12 +133,13 @@ 3. Configuration
>  
>      A number of directives were added that configure HTTP/3:
>  
> +        http3
> +        http3_hq
>          http3_stream_buffer_size
>          http3_max_concurrent_pushes
>          http3_max_concurrent_streams
>          http3_push
>          http3_push_preload
> -        http3_hq (requires NGX_HTTP_V3_HQ macro)
>  
>      In http, an additional variable is available: $http3.
>      The value of $http3 is "h3" for HTTP/3 connections,
> @@ -160,13 +161,15 @@ Example configuration:
>          server {
>              # for better compatibility it's recommended
>              # to use the same port for quic and https
> -            listen 8443 http3 reuseport;
> +            listen 8443 quic reuseport;
>              listen 8443 ssl;
>  
>              ssl_certificate     certs/example.com.crt;
>              ssl_certificate_key certs/example.com.key;
>              ssl_protocols       TLSv1.3;
>  
> +            http3 on;
> +

Shouldn't "http3" be "on" by default, so it will be used for all 
QUIC listening sockets automatically (unless disabled), basically 
matching the "listen ... http3" behaviour?

Not sure though, "off" by default seems to better match generic 
approach and prevents if from being enabled accidentally.  On the 
other hand, "listen ... quic" has little to no uses without HTTP/3 
being enabled, and requirement to explicitly enable it looks 
somewhat silly.

[...]

> diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
> --- a/src/http/ngx_http_core_module.c
> +++ b/src/http/ngx_http_core_module.c
> @@ -4191,6 +4191,11 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx
>  
>          if (ngx_strcmp(value[n].data, "http3") == 0) {
>  #if (NGX_HTTP_V3)
> +            ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
> +                               "the \"listen ... http3\" directive "
> +                               "is deprecated, use "
> +                               "the \"http3\" directive instead");

Note that this doesn't provide enough information to rewrite the 
configuration.  Something like "use the \"listen ... quic\" and 
\"http3\" directives instead" should be better (assuming "http3" 
is off by default).

> +            lsopt.quic = 1;
>              lsopt.http3 = 1;
>              lsopt.type = SOCK_DGRAM;
>              continue;

[...]

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx-devel mailing list