支持QUIC和HTTP/3
| 从源代码构建 配置 示例配置 故障排除 |
自1.25.0起,支持QUIC和HTTP/3协议。同时,自1.25.0起,QUIC和HTTP/3支持已经包含在Linux 二进制软件包中。
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"
或者,nginx可以配置与QuicTLS:
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
或者,nginx可以配置与现代版本的LibreSSL:
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
配置完成后,使用make编译和安装nginx。
配置
在ngx_http_core_module模块中,listen指令新增了一个参数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"
