一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中 HTTP/2 如何配合 SSL 证书正常启用多路复用

时间:2026-08-25 11:15:48 编辑:袖梨 来源:一聚教程网

要在 Nginx 中让 HTTP/2 多路复用真正生效,必须同时满足:可信 HTTPS 证书(如 Let’s Encrypt 全链)、listen 443 ssl http2 正确配置、TLSv1.2+ 与 ALPN 支持、现代 cipher suite;缺一即降级至 HTTP/1.1。

要在 Nginx 中让 HTTP/2 的多路复用真正生效,SSL 证书不是“配了就行”,而是必须和协议协商机制严格配合。核心在于:HTTPS 是前提,ALPN 是桥梁,listen 443 ssl http2 是触发开关——三者缺一不可。

SSL 证书必须有效且被客户端信任

浏览器只对可信证书协商 HTTP/2;自签名、过期、域名不匹配或链不完整(如缺中间证书)都会导致降级到 HTTP/1.1:

  1. 使用 Let’s Encrypt 全链证书(fullchain.pem + privkey.pem),而非仅 cert.pem
  2. 验证证书链完整性:运行 openssl s_client -connect your.site:443 -servername your.site -showcerts 2>/dev/null | grep "subject|issuer",确认根和中间证书都存在
  3. 避免在开发环境依赖自签名证书测试 h2——多数现代浏览器会直接拒绝协商

监听配置必须写对且带 ALPN 支持

HTTP/2 不是可选模块开关,而是 TLS 握手阶段通过 ALPN 扩展声明的协议名。Nginx 必须在 server 块中明确告知客户端“我支持 h2”:

  1. 正确写法:listen 443 ssl http2;ssl 和 http2 必须在同一行
  2. IPv6 需单独加:listen [::]:443 ssl http2;
  3. 禁用无效写法:listen 443 ssl; 后再加 http2 on; —— Nginx 会忽略或报错
  4. 确保 OpenSSL ≥ 1.0.2(推荐 1.1.1 或 3.x),并启用 ALPN(默认开启,但旧系统需确认)

TLS 协议与加密套件要现代且兼容

即使证书有效、listen 写对,若 TLS 层不支持协商 h2,连接仍会回落:

  1. 强制启用 TLSv1.2 及以上:ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/1.1)
  2. 选用支持 ALPN 的 cipher suite,例如:ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:...;
  3. 添加 ssl_prefer_server_ciphers off;,让客户端优先选择其支持的强算法

验证是否真走 HTTP/2 多路复用

别只信配置文件,实测才是关键:

  1. Chrome DevTools → Network → 刷新页面 → 看任意请求的 Protocol 列是否显示 h2
  2. 终端执行:curl -I --http2 https://yourdomain.com,响应首行应为 HTTP/2 200
  3. 进阶验证:在 DevTools 的 Network → Headers → 查看 :scheme: https:protocol: h2,确认 stream 级别信息

多路复用是协议自动行为,前端无需改代码。只要上述四点到位,浏览器就会在单个 TCP 连接上并发传输 HTML、CSS、JS、图片等资源,彻底绕开 HTTP/1.1 的队头阻塞。

热门栏目