必须在 HTTPS server 块中配置 listen 443 ssl http2,配齐有效证书、TLSv1.2+ 协议、ALPN 支持及 OCSP Stapling 等安全参数,否则浏览器静默降级至 HTTP/1.1。

在 Nginx 的 server 块中开启 HTTP/2,核心不是加个参数就完事,而是必须满足 HTTPS 前提、配齐证书与 TLS 安全配置,否则浏览器会静默降级到 HTTP/1.1。
HTTPS 是硬性前提,不能跳过
Chrome、Firefox、Safari 等主流浏览器只支持加密通道下的 HTTP/2(即 h2),不支持明文 h2c。因此:
-
listen 指令必须同时含
ssl和http2,推荐写法:listen 443 ssl http2; - 必须提供有效证书链:用
ssl_certificate指向包含根证书和中间证书的fullchain.pem,而非仅域名证书 - 必须配置私钥:
ssl_certificate_key指向对应的privkey.pem - HTTP 端口(如 80)不能加
http2,可配return 301 https://$host$request_uri;强制跳转
TLS 配置决定 HTTP/2 能否真正跑起来
即使语法正确,老旧或松散的 TLS 设置会让连接变慢、失败,甚至触发协议回退:
- 强制启用现代协议:
ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/1.1 和 SSLv3) - 选用前向安全且高效的加密套件,例如:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384; - 开启 OCSP Stapling 加速证书状态验证:
ssl_stapling on; ssl_stapling_verify on;(需额外配置ssl_trusted_certificate) - 设置会话缓存提升复用率:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;
HTTP/2 专属参数按需调优
默认值适合轻量站点,但富前端、带 JWT 或分布式追踪头的项目容易触发限制:
-
http2_max_field_size 16k;(默认 4k)——应对长 Cookie 或traceparent头 -
http2_max_header_size 64k;(默认 16k)——避免因请求头过大返回 431 错误 -
http2_max_requests 5000;(默认 1000)——延长单连接生命周期,减少 TLS 握手开销 -
http2_max_concurrent_streams 256;(默认 128)——提升多资源并行加载能力
配套连接与传输优化不可少
HTTP/2 的多路复用优势,依赖底层 TCP 和 Nginx 连接管理协同释放:
-
keepalive_timeout 300;(建议 60–300 秒)——与客户端策略对齐,避免空闲断连 -
keepalive_requests 10000;——配合http2_max_requests,最大化连接复用 - 启用高效传输:
sendfile on; tcp_nopush on; tcp_nodelay on;



















