Nginx开启HTTP/2必须基于HTTPS,需满足三要素:①Nginx≥1.9.5且编译含http_v2_module、OpenSSL≥1.0.2;②listen 443 ssl http2并配有效证书;③优化TLS配置如启用TLSv1.2+、会话缓存与OCSP装订。

在 Nginx 中开启 HTTP/2 并不能单独启用,它必须运行在 HTTPS 之上。只要满足证书、协议和配置三要素,HTTP/2 就能稳定生效,显著提升传输效率——尤其对资源密集型网页和移动端访问效果明显。
确保基础环境支持
Nginx 版本需 ≥ 1.9.5,OpenSSL 版本需 ≥ 1.0.2(推荐 1.1.1 或更高)。可通过以下命令快速验证:
- nginx -V 2>&1 | grep http_v2 —— 确认编译时启用了 http_v2_module
- openssl version —— 检查是否 ≥ 1.0.2,TLSv1.3 支持更佳
- nginx -t —— 配置修改后务必先校验语法
正确配置 HTTPS + HTTP/2 监听
关键点在于 listen 指令必须同时包含 ssl 和 http2,且仅对 443 端口有效。错误写法(如分两条 listen)将导致 HTTP/2 不生效:
- ✅ 正确:listen 443 ssl http2; 或 listen 443 http2 ssl;(顺序不敏感)
- ❌ 无效:listen 443 ssl; listen 443 http2;(Nginx 不报错,但客户端仍走 HTTP/1.1)
- 必须配全证书路径:ssl_certificate 指向 fullchain.pem(含中间证书),ssl_certificate_key 指向私钥
优化 TLS 协商以释放 HTTP/2 性能
HTTP/2 的多路复用优势依赖快速、安全的 TLS 握手。建议在 server 块中加入以下配置:
- 强制使用现代协议:ssl_protocols TLSv1.2 TLSv1.3;
- 启用会话缓存减少重复握手:ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;
- 开启 OCSP Stapling 加速证书状态验证:ssl_stapling on; ssl_stapling_verify on;(需配置 ssl_trusted_certificate)
- 加密套件优先前向安全与高效组合,例如:ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;
可选调优:适配业务场景的 HTTP/2 参数
默认参数已适用于多数站点,若遇到长 Header、高并发或弱网环境,可微调:
- http2_max_field_size 8k; —— 当 Cookie 或自定义 Header 超过默认 4KB 时使用
- http2_max_header_size 32k; —— 控制整个请求头总大小(默认 16KB)
- http2_max_requests 5000; —— 提高单连接请求数,降低移动端频繁建连开销
- http2_recv_timeout 60s; —— 弱网下延长等待客户端帧的超时时间
配置完成后 reload Nginx(sudo nginx -s reload),再用 Chrome DevTools 的 Network 标签查看 Protocol 列是否显示 h2,或执行 curl -I --http2 https://yoursite.com 验证响应头是否为 HTTP/2 协议。


















