一、HTTP/3 简介
- 基于 QUIC:在 UDP 之上实现的多路复用传输,内置拥塞控制与前向纠错,无需三次握手即可恢复连接。
- 零 RTT 重连:借助 TLS 1.3,实现连接恢复时的 0-RTT 数据发送(视底层库支持)。
- 多路复用无队头阻塞:每个流独立拥塞控制,单流丢包不影响其他流。
- 内置安全:QUIC 自带加密,TLS 与传输层紧密集成。
注意:当前模块为实验性功能(>=1.25.0),需自行评估风险。
二、环境与依赖
- NGINX ≥ 1.25.0 ,编译时加上
--with-http_v3_module
。 - QUIC 库:推荐 BoringSSL、LibreSSL 或 QuicTLS;若用 OpenSSL,则走兼容层,不支持早期数据(0-RTT)。
- 内核要求:Linux 5.7+(使用 eBPF 路由或 GSO 优化时)。
三、示例配置
nginx
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http3"';
access_log /var/log/nginx/quic_access.log quic;
server {
# 同端口同时监听 HTTP/3(UDP)和 HTTPS(TCP)
listen 8443 quic reuseport;
listen 8443 ssl;
ssl_certificate /etc/ssl/example.crt;
ssl_certificate_key /etc/ssl/example.key;
ssl_protocols TLSv1.3;
# 通知客户端支持 HTTP/3
add_header Alt-Svc 'h3=":8443"; ma=86400';
location / {
root /var/www/html;
index index.html;
}
}
}
listen ... quic
:开启 QUIC(UDP)监听add_header Alt-Svc
:通过 Alt-Svc 通告浏览器可走 HTTP/3
四、核心指令详解
指令 | 默认值 | 作用 | |
---|---|---|---|
`http3 on | off` | on | 全局/Server 级启用或关闭 HTTP/3 协商 |
`http3_hq on | off` | off | 启用 HTTP/0.9 over QUIC,用于兼容性测试 |
http3_max_concurrent_streams |
128 |