支持QUIC和HTTP/3

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

自1.25.0起,支持QUICHTTP/3协议。同时,自1.25.0起,QUIC和HTTP/3支持已经包含在Linux 二进制软件包中。

QUIC和HTTP/3支持为实验性质,请注意。

从源代码构建

使用configure命令配置构建。详情请参阅从源代码构建nginx

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

建议使用提供QUIC支持的SSL库构建nginx,如BoringSSLLibreSSLQuicTLS。否则,将使用不支持早期数据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';
        }
    }
}

故障排除

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