Nginx代理支持HTTP/2需启用SSL/TLS并配置listen 443 ssl http2;要求Nginx≥1.9.5、OpenSSL≥1.0.2且编译含http_v2模块;证书有效、TLS 1.2/1.3启用;客户端到Nginx走HTTP/2,后端默认仍为HTTP/1.1;可用浏览器开发者工具或curl -I --http2验证。
要让Nginx代理支持HTTP/2,核心是启用SSL/TLS并正确配置监听指令,因为HTTP/2在Nginx中仅允许在HTTPS(即
)下工作,不支持明文HTTP/2。
确认Nginx版本与编译支持
Nginx 1.9.5+ 原生支持HTTP/2,但需确保编译时链接了 OpenSSL 1.0.2+(推荐1.1.1+),且未禁用HTTP/2模块。可通过以下命令验证:
—— 输出含
表示模块已启用
—— 检查OpenSSL版本是否≥1.0.2
配置HTTPS监听并启用HTTP/2
在server块中,将
改为
,同时保留必要的SSL参数:
必须配置有效的SSL证书(自签名证书在现代浏览器中可能触发HTTP/2降级)
推荐启用TLS 1.2/1.3,禁用TLS 1.0/1.1;例如:
避免使用弱加密套件,如
后端代理无需特殊改动
Nginx作为反向代理时,客户端到Nginx走HTTP/2,Nginx到上游服务器默认仍用HTTP/1.1(除非上游也支持HTTP/2且显式配置
)。多数场景下无需升级后端协议——HTTP/2的多路复用、头部压缩等优势已在客户端连接层生效,显著减少TLS握手和队头阻塞开销。
验证HTTP/2是否生效
部署后可通过多种方式确认:
浏览器开发者工具 → Network标签 → 查看某请求的Protocol列是否显示
(需curl 7.47+且编译支持HTTP/2)
Chrome访问
查看当前连接列表
ssl http2nginx -V 2>&1 | grep -o 'http_v2'http_v2nginx -V 2>&1 | grep -i openssllisten 443 ssl;listen 443 ssl http2;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...http2h2curl -I --http2 https://your-domain.comchrome://net-internals/#http2