[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