最核心操作是为server块中https的listen指令添加http2参数;必须满足nginx≥1.9.5且启用http_v2_module、openssl≥1.0.2、配置有效ssl证书三个前提,listen须同时含ssl和http2,如listen 443 ssl http2。

直接在对应虚拟主机的 server 块中,把监听 HTTPS 的 listen 行加上 http2 参数即可。这是最核心、最确定的操作,其他配置都是围绕它展开的支撑条件。
必须满足的三个前提条件
HTTP/2 不是加个参数就自动生效的协议,它有硬性依赖:
-
Nginx 版本 ≥ 1.9.5(推荐 1.20+),且编译时启用了
http_v2_module模块(执行nginx -V 2>&1 | grep http_v2应输出with-http_v2_module) -
OpenSSL 版本 ≥ 1.0.2(推荐 1.1.1+),执行
nginx -V 2>&1 | grep -i openssl可查看实际链接版本 -
该 server 必须启用 HTTPS:即同一
server块中必须存在有效的ssl_certificate和ssl_certificate_key指令,HTTP/2 不支持明文 HTTP
listen 指令的正确写法
关键不是“能不能加”,而是“加在哪、怎么加”。以下写法全部有效,顺序无关,但空格必须清晰:
-
listen 443 ssl http2;(IPv4 默认端口) -
listen [::]:443 ssl http2;(IPv6,默认开启) -
listen 8443 ssl http2 default_server;(自定义端口 + 默认兜底) -
listen 443 ssl http2 reuseport;(高并发场景可加reuseport)
注意:ssl 和 http2 必须同时出现,缺一不可;分号不能漏;IPv4 和 IPv6 的监听需分别添加,不能合并。
配套 SSL 配置建议
仅加 http2 不足以稳定协商成功,还需确保 TLS 层兼容 ALPN(应用层协议协商):
- 强制启用 TLSv1.2 或更高版本:
ssl_protocols TLSv1.2 TLSv1.3; - 避免使用已废弃的加密套件,推荐保留现代组合,例如:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; - 不需手动开启 ALPN —— Nginx 1.13.0+ 已默认启用,但旧版本可检查是否被意外禁用
验证是否生效
改完配置后,务必执行两步:
- 运行
nginx -t确认语法无误 - 执行
nginx -s reload或通过宝塔等面板重载服务
验证方式:
- 浏览器打开 DevTools → Network 标签页 → 刷新页面 → 查看任意请求的 Protocol 列是否显示
h2 - 终端执行:
curl -I --http2 https://your-domain.com,响应头中应含HTTP/2 200










