支持 QUIC 和 HTTP/3

从源代码构建
配置
示例配置
故障排除

从 1.25.0 版本开始支持 QUICHTTP/3 协议。同样,从 1.25.0 版本开始,Linux 二进制软件包 中也提供了 QUIC 和 HTTP/3 支持。

QUIC 和 HTTP/3 支持处于实验阶段,使用需谨慎。

从源代码构建

构建使用 configure 命令进行配置。有关详细信息,请参阅 从源代码构建 Nginx

在配置 Nginx 时,可以使用 --with-http_v3_module 配置参数启用 QUIC 和 HTTP/3。

建议使用提供 QUIC 支持的 SSL 库构建 Nginx,例如 BoringSSLLibreSSLQuicTLS。否则,将使用不支持 早期数据OpenSSL 兼容性层。

使用以下命令使用 BoringSSL 配置 Nginx

./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"

配置完成后,使用 make 编译并安装 Nginx。

配置

listen 指令在 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';
        }
    }
}

故障排除

可能有助于识别问题的提示