HTTP/2 与 HTTP/3 升级教程
HTTP/2 和 HTTP/3 是新一代 HTTP 协议,通过多路复用、头部压缩、服务器推送等技术大幅提升 Web 性能。HTTP/3 更是基于 QUIC 协议替代了 TCP,进一步降低延迟。本文将详细介绍如何在搬瓦工 VPS 的 Nginx 上启用这两个协议。
一、协议对比
- HTTP/1.1:每个连接同时只能处理一个请求,需要多个 TCP 连接才能并行加载。
- HTTP/2:单连接多路复用,所有请求共享一个 TCP 连接。HPACK 头部压缩减少冗余数据。需要 HTTPS。
- HTTP/3:基于 QUIC(UDP),内建加密,0-RTT 连接建立。解决 TCP 的队头阻塞问题。需要 HTTPS。
二、前置条件
# 检查 Nginx 版本(HTTP/2 需要 1.9.5+,HTTP/3 需要 1.25.0+)
nginx -v
# 检查 OpenSSL 版本(需要 1.0.2+,推荐 1.1.1+)
openssl version
# 确认已安装 SSL 证书
# 推荐使用 Let's Encrypt 免费证书
apt install certbot python3-certbot-nginx -y
certbot --nginx -d your-domain.com
三、启用 HTTP/2
# 编辑 Nginx 配置
cat > /etc/nginx/sites-available/default <<'EOF'
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL 优化参数
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HSTS(强制 HTTPS)
add_header Strict-Transport-Security "max-age=63072000" always;
root /var/www/html;
index index.html;
}
EOF
nginx -t
systemctl reload nginx
四、验证 HTTP/2
# 使用 curl 检测
curl -I --http2 https://your-domain.com/
# 查看输出中是否包含 HTTP/2
# 使用 nghttp2 工具
apt install nghttp2-client -y
nghttp -nv https://your-domain.com/
# 浏览器开发者工具中查看
# 在 Network 面板的 Protocol 列可以看到 h2
五、启用 HTTP/3(QUIC)
HTTP/3 支持需要 Nginx 1.25.0 以上版本并在编译时包含 QUIC 支持。
5.1 安装支持 QUIC 的 Nginx
# 方法一:使用官方 mainline 仓库
cat > /etc/apt/sources.list.d/nginx.list <<'EOF'
deb http://nginx.org/packages/mainline/ubuntu/ jammy nginx
EOF
wget -O- https://nginx.org/keys/nginx_signing.key | gpg --dearmor > /etc/apt/trusted.gpg.d/nginx.gpg
apt update
apt install nginx -y
# 方法二:从源码编译(支持 QUIC)
cd /usr/src
wget http://nginx.org/download/nginx-1.27.0.tar.gz
tar xzf nginx-1.27.0.tar.gz
cd nginx-1.27.0
./configure \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-stream_quic_module
make -j$(nproc)
make install
5.2 配置 HTTP/3
server {
# HTTP/2 over TCP
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
# HTTP/3 over QUIC
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# TLS 1.3 是 HTTP/3 必需的
ssl_protocols TLSv1.2 TLSv1.3;
# 启用 0-RTT(可选,有重放攻击风险)
ssl_early_data on;
# 通知浏览器支持 HTTP/3
add_header Alt-Svc 'h3=":443"; ma=86400' always;
# QUIC 连接参数
quic_retry on;
root /var/www/html;
index index.html;
}
5.3 防火墙配置
# HTTP/3 使用 UDP 443 端口,需要开放
ufw allow 443/udp
# 或使用 iptables
iptables -A INPUT -p udp --dport 443 -j ACCEPT
六、验证 HTTP/3
# 使用 curl(需要支持 HTTP/3 的 curl 版本)
curl --http3 -I https://your-domain.com/
# 安装支持 HTTP/3 的 curl
apt install curl-http3 -y
# 或从源码编译
# 需要 ngtcp2 和 nghttp3 库
# 使用在线工具验证
# https://http3check.net/
七、HTTP/2 性能优化
# 在 http 块中优化 HTTP/2 参数
http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
# 大文件传输优化
http2_chunk_size 16k;
# 服务器推送(预加载关键资源)
location / {
http2_push /css/style.css;
http2_push /js/app.js;
}
八、SSL/TLS 优化
# OCSP Stapling(加速证书验证)
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# SSL 会话复用
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# TLS 1.3 0-RTT
ssl_early_data on;
proxy_set_header Early-Data $ssl_early_data;
总结
HTTP/2 的多路复用和头部压缩对所有网站都有明显提升,建议所有搬瓦工 VPS 用户启用。HTTP/3 进一步改善了高延迟和不稳定网络下的体验,对跨境访问尤其有效。详细的 QUIC 配置可以参考 QUIC 协议服务端配置教程。配合 Brotli 压缩 和 WebP 图片优化 可以实现最佳的 Web 性能。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。