Maxim Dounin
May 18, 2023 05:44PM
Hello!

On Sun, May 14, 2023 at 05:38:55PM +0400, Roman Arutyunyan wrote:

> # HG changeset patch
> # User Roman Arutyunyan <arut@nginx.com>
> # Date 1684045884 -14400
> # Sun May 14 10:31:24 2023 +0400
> # Branch quic
> # Node ID d8272b84031bea1940ef8a5b8e2f79ec6a2dcfc1
> # Parent 49a8edf7bf31b78681399cd7e93a8516788607dd
> Removed README.
>
> diff --git a/README b/README
> deleted file mode 100644
> --- a/README
> +++ /dev/null
> @@ -1,319 +0,0 @@
> -Experimental QUIC support for nginx
> ------------------------------------
> -
> -1. Introduction
> -2. Building from sources
> -3. Configuration
> -4. Directives
> -5. Clients
> -6. Troubleshooting
> -7. Contributing
> -8. Links
> -
> -1. Introduction
> -
> - This is an experimental QUIC [1] / HTTP/3 [2] support for nginx.
> -
> - The code is developed in a separate "quic" branch available
> - at https://hg.nginx.org/nginx-quic. Currently it is based
> - on nginx mainline 1.23.x. We merge new nginx releases into
> - this branch regularly.
> -
> - The project code base is under the same BSD license as nginx.
> -
> - The code is currently at a beta level of quality, however
> - there are several production deployments with it.
> -
> - NGINX Development Team is working on improving HTTP/3 support to
> - integrate it into the main NGINX codebase. Thus, expect further
> - updates of this code, including features, changes in behaviour,
> - bug fixes, and refactoring. NGINX Development team will be
> - grateful for any feedback and code submissions.
> -
> - Please contact NGINX Development Team via nginx-devel mailing list [3].
> -
> - What works now:
> -
> - IETF QUIC version 1 is supported. Internet drafts are no longer supported.
> -
> - nginx should be able to respond to HTTP/3 requests over QUIC and
> - it should be possible to upload and download big files without errors.
> -
> - + The handshake completes successfully
> - + One endpoint can update keys and its peer responds correctly
> - + 0-RTT data is being received and acted on
> - + Connection is established using TLS Resume Ticket
> - + A handshake that includes a Retry packet completes successfully
> - + Stream data is being exchanged and ACK'ed
> - + An H3 transaction succeeded
> - + One or both endpoints insert entries into dynamic table and
> - subsequently reference them from header blocks
> - + Version Negotiation packet is sent to client with unknown version
> - + Lost packets are detected and retransmitted properly
> - + Clients may migrate to new address
> -
> -2. Building from sources
> -
> - The build is configured using the configure command.
> - Refer to http://nginx.org/en/docs/configure.html for details.
> -
> - When configuring nginx, it's possible to enable QUIC and HTTP/3
> - using the following new configuration option:
> -
> - --with-http_v3_module - enable QUIC and HTTP/3
> -
> - A library that provides QUIC support is recommended to build nginx, there
> - are several of those available on the market:
> - + BoringSSL [4]
> - + LibreSSL [5]
> - + QuicTLS [6]
> -
> - Alternatively, nginx can be configured with OpenSSL compatibility
> - layer, which emulates BoringSSL QUIC API for OpenSSL. This mode is
> - enabled by default if native QUIC support is not detected.
> - 0-RTT is not supported in OpenSSL compatibility mode.
> -
> - Clone the NGINX QUIC repository
> -
> - $ hg clone -b quic https://hg.nginx.org/nginx-quic
> - $ cd nginx-quic
> -
> - Use the following command to configure nginx with BoringSSL [4]
> -
> - $ ./auto/configure --with-debug --with-http_v3_module \
> - --with-cc-opt="-I../boringssl/include" \
> - --with-ld-opt="-L../boringssl/build/ssl \
> - -L../boringssl/build/crypto"
> - $ make
> -
> - Alternatively, nginx can be configured with QuicTLS [6]
> -
> - $ ./auto/configure --with-debug --with-http_v3_module \
> - --with-cc-opt="-I../quictls/build/include" \
> - --with-ld-opt="-L../quictls/build/lib"
> -
> - Alternatively, nginx can be configured with a modern version
> - of LibreSSL [7]
> -
> - $ ./auto/configure --with-debug --with-http_v3_module \
> - --with-cc-opt="-I../libressl/build/include" \
> - --with-ld-opt="-L../libressl/build/lib"
> -
> -3. Configuration
> -
> - The HTTP "listen" directive got a new option "quic" which enables
> - QUIC as client transport protocol instead of TCP.
> -
> - Along with "quic", it's also possible to specify "reuseport"
> - option [8] to make it work properly with multiple workers.
> -
> - To enable address validation:
> -
> - quic_retry on;
> -
> - To enable 0-RTT:
> -
> - ssl_early_data on;
> -
> - To enable GSO (Generic Segmentation Offloading):
> -
> - quic_gso on;
> -
> - To set host key for various tokens:
> -
> - quic_host_key <filename>;
> -
> - QUIC requires TLSv1.3 protocol, which is enabled by the default
> - by "ssl_protocols" directive.
> -
> - By default, GSO Linux-specific optimization [10] is disabled.
> - Enable it in case a corresponding network interface is configured to
> - support GSO.
> -
> - A number of directives were added that configure HTTP/3:
> -
> - http3
> - http3_hq
> - http3_stream_buffer_size
> - http3_max_concurrent_streams
> -
> - In http, an additional variable is available: $http3.
> - The value of $http3 is "h3" for HTTP/3 connections,
> - "hq" for hq connections, or an empty string otherwise.
> -
> -Example configuration:
> -
> - http {
> - log_format quic '$remote_addr - $remote_user [$time_local] '
> - '"$request" $status $body_bytes_sent '
> - '"$http_referer" "$http_user_agent" "$http3"';
> -
> - access_log logs/access.log quic;
> -
> - server {
> - # for better compatibility it's recommended
> - # to use the same port for quic and https
> - listen 8443 quic reuseport;
> - listen 8443 ssl;
> -
> - ssl_certificate certs/example.com.crt;
> - ssl_certificate_key certs/example.com.key;
> -
> - location / {
> - # required for browsers to direct them into quic port
> - add_header Alt-Svc 'h3=":8443"; ma=86400';
> - }
> - }
> - }
> -
> -4. Directives
> -
> - Syntax: quic_bpf on | off;
> - Default: quic_bpf off;
> - Context: main
> -
> - Enables routing of QUIC packets using eBPF.
> - When enabled, this allows to support QUIC connection migration.
> - The directive is only supported on Linux 5.7+.
> -
> -
> - Syntax: quic_retry on | off;
> - Default: quic_retry off;
> - Context: http, server
> -
> - Enables the QUIC Address Validation feature. This includes:
> - - sending a new token in a Retry packet or a NEW_TOKEN frame
> - - validating a token received in the Initial packet
> -
> -
> - Syntax: quic_gso on | off;
> - Default: quic_gso off;
> - Context: http, server
> -
> - Enables sending in optimized batch mode using segmentation offloading.
> - Optimized sending is only supported on Linux featuring UDP_SEGMENT.
> -
> -
> - Syntax: quic_host_key file;
> - Default: -
> - Context: http, server
> -
> - Specifies a file with the secret key used to encrypt stateless reset and
> - address validation tokens. By default, a randomly generated key is used.
> -
> -
> - Syntax: quic_active_connection_id_limit number;
> - Default: quic_active_connection_id_limit 2;
> - Context: http, server
> -
> - Sets the QUIC active_connection_id_limit transport parameter value.
> - This is the maximum number of connection IDs we are willing to store.
> -
> -
> - Syntax: http3_stream_buffer_size size;
> - Default: http3_stream_buffer_size 64k;
> - Context: http, server
> -
> - Sets buffer size for reading and writing of the QUIC STREAM payload.
> - The buffer size is used to calculate initial flow control limits
> - in the following QUIC transport parameters:
> - - initial_max_data
> - - initial_max_stream_data_bidi_local
> - - initial_max_stream_data_bidi_remote
> - - initial_max_stream_data_uni
> -
> -
> - Syntax: http3_max_concurrent_streams number;
> - Default: http3_max_concurrent_streams 128;
> - Context: http, server
> -
> - Sets the maximum number of concurrent HTTP/3 streams in a connection.
> -
> -
> - Syntax: http3 on | off;
> - Default: http3 on;
> - Context: http, server
> -
> - Enables HTTP/3 protocol negotiation.
> -
> -
> - Syntax: http3_hq on | off;
> - Default: http3_hq off;
> - Context: http, server
> -
> - Enables HTTP/0.9 protocol negotiation used in QUIC interoperability tests.
> -
> -5. Clients
> -
> - * Browsers
> -
> - Known to work: Firefox 90+ and Chrome 92+ (QUIC version 1)
> -
> - Beware of strange issues: sometimes browser may decide to ignore QUIC
> - Cache clearing/restart might help. Always check access.log and
> - error.log to make sure the browser is using HTTP/3 and not TCP https.
> -
> - * Console clients
> -
> - Known to work: ngtcp2, firefox's neqo and chromium's console clients:
> -
> - $ examples/client 127.0.0.1 8443 https://example.com:8443/index.html
> -
> - $ ./neqo-client https://127.0.0.1:8443/
> -
> - $ chromium-build/out/my_build/quic_client http://example.com:8443
> -
> -
> - In case everyhing is right, the access log should show something like:
> -
> - 127.0.0.1 - - [24/Apr/2020:11:27:29 +0300] "GET / HTTP/3" 200 805 "-"
> - "nghttp3/ngtcp2 client" "quic"
> -
> -
> -6. Troubleshooting
> -
> - Here are some tips that may help to identify problems:
> -
> - + Ensure nginx is built with proper SSL library that supports QUIC
> -
> - + Ensure nginx is using the proper SSL library in runtime
> - (`nginx -V` shows what it's using)
> -
> - + Ensure a client is actually sending requests over QUIC
> - (see "Clients" section about browsers and cache)
> -
> - We recommend to start with simple console client like ngtcp2
> - to ensure the server is configured properly before trying
> - with real browsers that may be very picky with certificates,
> - for example.
> -
> - + Build nginx with debug support [9] and check the debug log.
> - It should contain all details about connection and why it
> - failed. All related messages contain "quic " prefix and can
> - be easily filtered out.
> -
> - + For a deeper investigation, please enable additional debugging
> - in src/event/quic/ngx_event_quic_connection.h:
> -
> - #define NGX_QUIC_DEBUG_PACKETS
> - #define NGX_QUIC_DEBUG_FRAMES
> - #define NGX_QUIC_DEBUG_ALLOC
> - #define NGX_QUIC_DEBUG_CRYPTO
> -
> -7. Contributing
> -
> - Please refer to
> - http://nginx.org/en/docs/contributing_changes.html
> -
> -8. Links
> -
> - [1] https://datatracker.ietf.org/doc/html/rfc9000
> - [2] https://datatracker.ietf.org/doc/html/rfc9114
> - [3] https://mailman.nginx.org/mailman/listinfo/nginx-devel
> - [4] https://boringssl.googlesource.com/boringssl/
> - [5] https://www.libressl.org/
> - [6] https://github.com/quictls/openssl
> - [7] https://github.com/libressl-portable/portable/releases/tag/v3.6.0
> - [8] https://nginx.org/en/docs/http/ngx_http_core_module.html#listen
> - [9] https://nginx.org/en/docs/debugging_log.html
> - [10] http://vger.kernel.org/lpc_net2018_talks/willemdebruijn-lpc2018-udpgso-paper-DRAFT-1.pdf

Looks good.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH 0 of 4] QUIC cleanup

Roman Arutyunyan 415 May 14, 2023 09:40AM

[PATCH 1 of 4] Stream: removed QUIC support

Roman Arutyunyan 164 May 14, 2023 09:40AM

Re: [PATCH 1 of 4] Stream: removed QUIC support

Maxim Dounin 137 May 18, 2023 05:30PM

[PATCH 2 of 4] Common tree insert function for QUIC and UDP connections

Roman Arutyunyan 149 May 14, 2023 09:40AM

Re: [PATCH 2 of 4] Common tree insert function for QUIC and UDP connections

Maxim Dounin 121 May 18, 2023 05:32PM

[PATCH 3 of 4] HTTP/3: removed server push support

Roman Arutyunyan 146 May 14, 2023 09:40AM

Re: [PATCH 3 of 4] HTTP/3: removed server push support

Maxim Dounin 136 May 18, 2023 05:42PM

Re: [PATCH 3 of 4] HTTP/3: removed server push support

Roman Arutyunyan 135 May 19, 2023 12:46AM

Re: [PATCH 3 of 4] HTTP/3: removed server push support

Maxim Dounin 168 May 19, 2023 12:10PM

[PATCH 4 of 4] Removed README

Roman Arutyunyan 145 May 14, 2023 09:40AM

Re: [PATCH 4 of 4] Removed README

Maxim Dounin 155 May 18, 2023 05:44PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 172
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready