annotate README @ 7949:032cb35ce758 quic

HTTP/3: http3_max_field_size directive to limit string size. Client streams may send literal strings which are now limited in size by the new directive. The default value is 4096. The directive is similar to HTTP/2 directive http2_max_field_size.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 29 Jun 2020 15:56:14 +0300
parents 3c32717d7bb2
children 6e84524886d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1 Experimental QUIC support for nginx
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 -----------------------------------
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 1. Introduction
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5 2. Installing
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6 3. Configuration
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 4. Clients
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 5. Troubleshooting
7887
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
9 6. Contributing
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
10 7. Links
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12 1. Introduction
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14 This is an experimental QUIC [1] / HTTP/3 [2] support for nginx.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16 The code is developed in a separate "quic" branch available
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17 at https://hg.nginx.org/nginx-quic. Currently it is based
7907
4ea302a47d28 README: update after merging 1.19.0.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7887
diff changeset
18 on nginx mainline 1.19.x. We are planning to merge new nginx
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19 releases into this branch regularly.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
21 The project code base is under the same BSD license as nginx.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23 The code is at an early alpha level of quality and should not
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 be used in production.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 We are working on improving HTTP/3 support with the goal of
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 integrating it to the main NGINX codebase. Expect frequent
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 updates of this code and don't rely on it for whatever purpose.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 We'll be grateful for any feedback and code submissions however
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 we don't bear any responsibilities for any issues with this code.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33 You can always contact us via nginx-devel mailing list [3].
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35 What works now:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36
7944
3c32717d7bb2 README: documented draft-28, draft-29 support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7907
diff changeset
37 Currently we support IETF-QUIC draft-27, draft-28, draft-29.
3c32717d7bb2 README: documented draft-28, draft-29 support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7907
diff changeset
38 Earlier drafts are NOT supported as they have incompatible wire format.
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39
7887
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
40 You may look at src/event/ngx_event_quic.h for alternative values of the
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
41 NGX_QUIC_DRAFT_VERSION macro used to select IETF draft version number.
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
42
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43 nginx should be able to respond to simple HTTP/3 requests over QUIC and
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
44 it should be possible to upload and download big files without errors.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
45
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46 + The handshake completes successfully
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47 + One endpoint can update keys and its peer responds correctly
7867
70dbd7d0e466 Fixed a typo.
Vladimir Homutov <vl@nginx.com>
parents: 7866
diff changeset
48 + 0-RTT data is being received and acted on
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
49 + Connection is established using TLS Resume Ticket
7866
2b580ac17a47 README: Retry support, protocol error messages implemented.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7850
diff changeset
50 + A handshake that includes a Retry packet completes successfully
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51 + Stream data is being exchanged and ACK'ed
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52 + An H3 transaction succeeded
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 + One or both endpoints insert entries into dynamic table and
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54 subsequently reference them from header blocks
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
55
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
56 Not (yet) supported features:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
57
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
58 - Version negotiation
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
59 - ECN, Congestion control and friends as specified in quic-recovery [5]
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60 - A connection with the spin bit succeeds and the bit is spinning
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61 - Structured Logging
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62 - QUIC recovery (proper congestion and flow control)
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63 - NAT Rebinding
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
64 - Address Mobility
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65 - Server push
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 - HTTP/3 trailers
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 Since the code is experimental and still under development,
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69 a lot of things may not work as expected, for example:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
71 - ACK handling is basic: every received ack-eliciting packet
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72 is acknowledged, no ack ranges are used
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74 - Flow control mechanism is basic and intended to avoid CPU hog and make
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
75 simple interactions possible
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
76
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
77 - Not all draft requirements are strictly followed; some of checks are
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
78 omitted for the sake of simplicity of initial implementation
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
79
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
80 2. Installing
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 You will need a BoringSSL [4] library that provides QUIC support
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
83
7850
796b5b6c43cd Mention quic branch in README.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7849
diff changeset
84 $ hg clone -b quic https://hg.nginx.org/nginx-quic
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 $ cd nginx-quic
7849
0e6528551f26 Configure: unbreak with old OpenSSL, --with-http_v3_module added.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7843
diff changeset
86 $ ./auto/configure --with-debug --with-http_v3_module \
0e6528551f26 Configure: unbreak with old OpenSSL, --with-http_v3_module added.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7843
diff changeset
87 --with-cc-opt="-I../boringssl/include" \
0e6528551f26 Configure: unbreak with old OpenSSL, --with-http_v3_module added.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7843
diff changeset
88 --with-ld-opt="-L../boringssl/build/ssl \
0e6528551f26 Configure: unbreak with old OpenSSL, --with-http_v3_module added.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7843
diff changeset
89 -L../boringssl/build/crypto"
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90 $ make
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 3. Configuration
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 The "listen" directive got a new option: "http3"
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95 which enables HTTP/3 over QUIC on the specified port.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 Along with "http3", you also have to specify "reuseport" option [6]
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98 to make it work properly with multiple workers.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100 A number of directives were added that specify transport parameter values:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102 quic_max_idle_timeout
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 quic_max_ack_delay
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104 quic_max_packet_size
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 quic_initial_max_data
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 quic_initial_max_stream_data_bidi_local
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107 quic_initial_max_stream_data_bidi_remote
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108 quic_initial_max_stream_data_uni
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109 quic_initial_max_streams_bidi
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
110 quic_initial_max_streams_uni
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111 quic_ack_delay_exponent
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 quic_active_migration
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113 quic_active_connection_id_limit
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114
7879
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
115 To enable address validation:
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
116
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
117 quic_retry on;
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
118
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
119 To enable 0-RTT:
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
120
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
121 ssl_early_data on;
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
122
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
123 Make sure that TLS 1.3 is configured which is required for QUIC:
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
124
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
125 ssl_protocols TLSv1.3;
af22b60a905b README: documented Retry, 0-RTT, TLSv1.3 configuration.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7873
diff changeset
126
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 Two additional variables are available: $quic and $http3.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 The value of $quic is "quic" if QUIC connection is used,
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129 and empty string otherwise. The value of $http3 is a string
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 "h3-xx" where "xx" is the supported draft number.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 Example configuration:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 http {
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135 log_format quic '$remote_addr - $remote_user [$time_local] '
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136 '"$request" $status $body_bytes_sent '
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 '"$http_referer" "$http_user_agent" "$quic" "$http3"';
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 access_log logs/access.log quic;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 server {
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 # for better compatibility it's recommended
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 # to use the same port for quic and https
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 listen 8443 http3 reuseport;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 listen 8443 ssl;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 ssl_certificate certs/example.com.crt;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
148 ssl_certificate_key certs/example.com.key;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149 ssl_protocols TLSv1.3;
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 location / {
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 # required for browsers to direct them into quic port
7873
94c06fe6e159 README: pointed out Alt-Svc "ma" parameter useful with curl.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7872
diff changeset
153 add_header Alt-Svc '$http3=":8443"; ma=86400';
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154 }
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 }
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 }
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 4. Clients
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 * Browsers
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162 Known to work: Firefox 75+ and Chrome 83+
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 Beware of strange issues: sometimes browser may decide to ignore QUIC
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 Cache clearing/restart might help. Always check access.log and
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 error.log to make sure you are using HTTP/3 and not TCP https.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168 + to enable QUIC in Firefox, set the following in 'about:config':
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 network.http.http3.enabled = true
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171 + to enable QUIC in Chrome, enable it on command line and force it
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 on your site:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 $ ./chrome --enable-quic --quic-version=h3-27 \
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 --origin-to-force-quic-on=example.com:8443
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177 * Console clients
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179 Known to work: ngtcp2, firefox's neqo and chromium's console clients:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181 $ examples/client 127.0.0.1 8443 https://example.com:8443/index.html
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 $ ./neqo-client https://127.0.0.1:8443/
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 $ chromium-build/out/my_build/quic_client http://example.com:8443 \
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 --quic_version=h3-27 \
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 --allow_unknown_root_cert \
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188 --disable_certificate_verification
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 If you've got it right, in the access log you should see something like:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 127.0.0.1 - - [24/Apr/2020:11:27:29 +0300] "GET / HTTP/3" 200 805 "-"
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 "nghttp3/ngtcp2 client" "quic" "h3-27"
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 5. Troubleshooting
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199 Here are some tips that may help you to identify problems:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 + Ensure you are building with proper SSL library that
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202 implements draft 27
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 + Ensure you are using the proper SSL library in runtime
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205 (`nginx -V` will show you what you are using)
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 + Ensure your client is actually sending QUIC requests
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 (see "Clients" section about browsers and cache)
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 We recommend to start with simple console client like ngtcp2
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 to ensure you've got server configured properly before trying
7872
578563babbd1 Fixed a typo.
Vladimir Homutov <vl@nginx.com>
parents: 7867
diff changeset
212 with real browsers that may be very picky with certificates,
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 for example.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 + Build nginx with debug support [7] and check your debug log.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 It should contain all details about connection and why it
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217 failed. All related messages contain "quic " prefix and can
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 be easily filtered out.
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 + If you want to investigate deeper, you may want to enable
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 additional debugging in src/event/ngx_event_quic.h:
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 #define NGX_QUIC_DEBUG_PACKETS
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 #define NGX_QUIC_DEBUG_FRAMES
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225 #define NGX_QUIC_DEBUG_FRAMES_ALLOC
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 #define NGX_QUIC_DEBUG_CRYPTO
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227
7887
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
228 6. Contributing
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
229
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
230 If you are willing to contribute, please refer to
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
231 http://nginx.org/en/docs/contributing_changes.html
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
232
c7d1b500bd0a Updated README with "Contributing" section and draft details.
Vladimir Homutov <vl@nginx.com>
parents: 7879
diff changeset
233 7. Links
7843
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235 [1] https://tools.ietf.org/html/draft-ietf-quic-transport-27
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 [2] https://tools.ietf.org/html/draft-ietf-quic-http-27
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 [3] https://mailman.nginx.org/mailman/listinfo/nginx-devel
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 [4] https://boringssl.googlesource.com/boringssl/
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239 [5] https://tools.ietf.org/html/draft-ietf-quic-recovery-27
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 [6] https://nginx.org/en/docs/http/ngx_http_core_module.html#listen
3e894ace66ee Added README.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 [7] https://nginx.org/en/docs/debugging_log.html