Nginx启用HTTP/2需在HTTPS的server块listen指令中同时添加ssl和http2参数,且须满足版本≥1.9.5、含with-http_v2_module模块、OpenSSL≥1.0.2、配置有效证书及TLS 1.2+等全部前提。

直接在目标虚拟主机的 server 块中,为 HTTPS 监听行添加 http2 参数即可生效——但必须确保 ssl 和 http2 同时存在,且其他前提全部满足。
确认 Nginx 已具备 HTTP/2 支持能力
- 运行
nginx -v查看版本:需 ≥ 1.9.5(推荐 1.20+) - 运行
nginx -V 2>&1 | grep with-http_v2_module:输出应含with-http_v2_module - 运行
nginx -V 2>&1 | grep -i openssl:OpenSSL 版本需 ≥ 1.0.2(推荐 1.1.1+)
确保该虚拟主机已启用 HTTPS
-
server块内必须包含有效的ssl_certificate和ssl_certificate_key指令 - 证书路径需正确,私钥权限建议设为
600(如chmod 600 /path/to/key.pem) - 自签名证书可用于测试,生产环境请使用 Let’s Encrypt 或可信 CA 签发证书
修改 listen 指令以启用 HTTP/2
- 找到监听 HTTPS 的行,例如原为:
listen 443 ssl;listen [::]:443 ssl; - 改为:
listen 443 ssl http2;listen [::]:443 ssl http2; - 其他合法写法还包括:
listen 8443 ssl http2;(自定义端口)listen 443 ssl http2 default_server;(设为默认 HTTPS 服务) - 注意:
ssl与http2缺一不可;IPv4 和 IPv6 需分别配置;分号不可遗漏
补充推荐的 TLS 配置(提升协商成功率)
- 强制使用安全协议:
ssl_protocols TLSv1.2 TLSv1.3; - 使用现代加密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; -
ssl_prefer_server_ciphers off;(保持默认即可) - ALPN 在 Nginx 1.13.0+ 中默认启用,无需额外开启
验证是否成功启用
- 执行
nginx -t检查语法 - 执行
nginx -s reload重载配置 - 浏览器打开 DevTools → Network 标签页,刷新页面,查看协议列是否显示
h2 - 或终端执行:
curl -I --http2 https://your-domain.com,响应头中出现HTTP/2 200即表示成功
不复杂但容易忽略

















