支持 QUIC 和 HTTP/3
Building from sources Configuration Example Configuration Troubleshooting |
自 1.25.0 起 支持 QUIC 和 HTTP/3协议。此外,从 1.25.0 开始,Linux二进制包中提供了 QUIC 和 HTTP/3 支持。
QUIC 和 HTTP/3 支持是实验性的,买者自负。
从源头构建
使用命令配置构建configure
。详细信息
请参阅从源代码构建 nginx 。
配置 nginx 时,可以使用
--with-http_v3_module
配置参数启用 QUIC 和 HTTP/3。
建议使用提供 QUIC 支持的 SSL 库来构建 nginx,例如 BoringSSL、 LibreSSL或 QuicTLS。否则, 将使用不支持 早期数据的OpenSSL兼容层。
使用以下命令为 nginx 配置 BoringSSL:
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../boringssl/include" --with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto"
或者,可以使用QuicTLS 配置 nginx :
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../quictls/build/include" --with-ld-opt="-L../quictls/build/lib"
或者,可以使用现代版本的LibreSSL 配置 nginx :
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../libressl/build/include" --with-ld-opt="-L../libressl/build/lib"
配置完成后,使用 .nginx 编译并安装 nginx make
。
配置
ngx_http_core_module模块中的监听指令 获得 了一个新参数 quic ,它 可以在指定端口上启用基于 QUIC 的 HTTP/3。
除了该quic
参数之外,还可以指定
reuseport
参数,以使其与多个工作人员一起正常工作。
有关指令列表,请参阅 ngx_http_v3_module。
要启用 地址验证:
quic_retry on;
要启用 0-RTT:
ssl_early_data on;
要启用 GSO(通用分段卸载):
quic_gso on;
为各种令牌设置 主机密钥:
quic_host_key <filename>;
QUIC 需要 TLSv1.3 协议版本,该版本在ssl_protocols指令 中默认启用。
默认情况下, GSO Linux 特定的优化 处于禁用状态。如果相应的网络接口配置为支持 GSO,请启用它。
配置示例
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 to quic port add_header Alt-Svc 'h3=":8443"; ma=86400'; } } }
故障排除
可能有助于识别问题的提示:
- 确保 nginx 是使用正确的 SSL 库构建的。
-
确保 nginx 在运行时使用正确的 SSL 库(显示
nginx -V
当前使用的库)。 - 确保客户端确实通过 QUIC 发送请求。建议从简单的控制台客户端(例如 ngtcp2)开始 ,以确保在尝试使用可能对证书非常挑剔的真实浏览器之前正确配置服务器。
- 构建具有调试支持的
nginx
并检查调试日志。它应包含有关连接及其失败原因的所有详细信息。所有相关消息都包含“
quic
”前缀,可以轻松过滤掉。 -
为了进行更深入的调查,可以使用以下宏启用附加调试:
NGX_QUIC_DEBUG_PACKETS
,NGX_QUIC_DEBUG_FRAMES
,NGX_QUIC_DEBUG_ALLOC
,NGX_QUIC_DEBUG_CRYPTO
。./configure --with-http_v3_module --with-debug --with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"