Nginx启用HTTP/2必须配置HTTPS,server块中listen 443 ssl http2并配全SSL证书;需优化TLS协议、加密套件、OCSP Stapling及会话缓存;可调http2_max_field_size等参数;通过浏览器Network或curl --http2验证是否生效。

在 Nginx 中启用 HTTP/2 协议,核心前提是使用 HTTPS(即必须配置 SSL/TLS),因为主流浏览器(Chrome、Firefox、Safari 等)仅支持 HTTP/2 over TLS。单纯开启 http2 指令而不满足前置条件,Nginx 不会报错,但客户端实际仍会降级为 HTTP/1.1。
server 块中正确启用 HTTP/2
只需在 listen 指令后添加 http2 参数即可。注意:该参数仅对 HTTPS 监听有效,且需搭配有效的 SSL 配置:
- 确保已配置
ssl_certificate和ssl_certificate_key - 监听端口通常为
443 ssl http2,不能写成listen 443 http2 ssl(顺序不敏感,但推荐ssl http2) - 一个 server 块可同时监听 HTTP/1.1 和 HTTP/2(例如:80 端口只写
listen 80;443 端口加ssl http2)
示例配置片段:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# 其他配置...
}
关键 TLS 参数优化(影响 HTTP/2 性能)
HTTP/2 依赖 TLS 的握手效率和加密套件选择。以下配置可提升协商速度与兼容性:
- 启用 TLSv1.2 和 TLSv1.3(禁用旧版本):
ssl_protocols TLSv1.2 TLSv1.3; - 优先使用高效前向安全套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 启用 OCSP Stapling 减少证书验证延迟:
ssl_stapling on; ssl_stapling_verify on;(需配置可信 CA 证书) - 设置合理会话缓存:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;
HTTP/2 特有调优项(非必需但推荐)
Nginx 提供少量直接作用于 HTTP/2 连接的指令,用于控制帧行为和资源分配:
-
http2_max_field_size:限制请求头单个字段最大长度(默认 4k),若应用使用超长 Cookie 或自定义 Header,可适当调大(如8k) -
http2_max_header_size:限制整个请求头总大小(默认 16k),同上场景下可设为32k -
http2_max_requests:单个连接最大处理请求数(默认 1000),高并发短连接场景可提高(如5000),避免频繁重连 -
http2_recv_timeout:等待客户端发送帧的超时时间(默认 30s),网络不稳定时可略延长
验证是否生效
启用后需确认客户端实际使用 HTTP/2:
- 浏览器开发者工具 → Network 标签页 → 查看协议列(显示
h2表示成功) - 命令行检查:
curl -I --http2 https://example.com(返回头中含HTTP/2 200) - Nginx 日志中可通过
$server_protocol变量记录协议版本(如HTTP/2.0)
不复杂但容易忽略










