支持 QUIC 和 HTTP/3

Building from sources
Configuration
Example Configuration
Troubleshooting

自 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兼容层。

使用以下命令为 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';
        }
    }
}

故障排除

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