35人参与 • 2025-04-12 • 网络协议
http/2 是 http 协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率。通过 nginx 配置 http/2,可以充分利用其多路复用、头部压缩和流量优先级功能,为用户提供更快更安全的访问体验。
http/2 是 2015 年发布的 http 协议升级版(rfc 7540)。它在保留 http 核心语义(如请求方法、状态码、uri 和头部字段)的同时,对底层的传输机制进行了全面优化,主要目标是提升性能、减少延迟和优化资源加载。
多路复用(multiplexing):
头部压缩(hpack):
使用高效的二进制编码压缩 http 头部,减少重复传输相同头部字段带来的开销。
流量优先级(stream prioritization):
可为不同的请求分配优先级,优化关键资源的加载顺序。
服务器推送(server push):
服务器可以在客户端请求前主动推送资源(如 css、js 文件)。
更安全(通常通过 https 使用):
虽然 http/2 不强制加密,但主流浏览器要求通过 https 使用。
更快的页面加载速度。
更高的带宽利用率。
减少了延迟和连接开销。
改善了移动网络环境下的访问体验。
nginx 版本:
openssl 版本:
无特殊硬件要求, http/2 的多路复用可能增加服务器的 cpu 和内存使用。
以下是配置 nginx 支持 http/2 的完整步骤。
检查当前 nginx 版本
nginx -v
http/2 通常需要 https,因此需要先配置 ssl/tls。
2.1 生成自签名证书(仅用于测试)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt
2.2 安装 ssl 证书(生产环境)
编辑 nginx 配置文件(如 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf):
基本配置
server { listen 8185 ssl http2; ssl_protocols tlsv1.3 tlsv1.2; # 仅使用 tls 1.3 和 1.2 ssl_prefer_server_ciphers off; # 优先使用服务器端的加密套件 ssl_ciphers ecdhe-rsa-aes128-sha256:ecdhe-rsa-aes256-sha384:ecdhe-rsa-aes128-gcm-sha256:ecdhe-rsa-aes256-gcm-sha384:ecdhe-ecdsa-aes128-sha256:ecdhe-ecdsa -aes256-sha384:ecdhe-ecdsa-aes128-gcm-sha256:ecdhe-ecdsa-aes256-gcm-sha384; ssl_certificate /yourpath/server.crt; # 替换证书文件路径 ssl_certificate_key /yourpath/server.key; # 替换私钥文件路径 # http/2 参数优化 http2_max_concurrent_streams 128; large_client_header_buffers 4 32k; server_name localhost; root /usr/share/nginx/html/dist/; # 其他配置 # …… }
listen 8185 ssl http2;:
使用 openssl 测试 alpn:
openssl s_client -connect ip:port -alpn h2
如果输出中包含 alpn protocol: h2,说明 alpn 协商正常。
打开浏览器开发者工具(f12)。
转到 network(网络)面板。
查看 protocol 列是否显示为 h2。
安装 nghttp:
sudo yum install nghttp2 -y # centos/redhat
运行测试:
nghttp -v https://example.com
如果输出中包含 the negotiated protocol: h2,说明 http/2 正常工作。
如果客户端不支持 http/2,nginx 会自动回退到 http/1.1。
确保服务器使用了支持 alpn 功能的 openssl 版本(1.0.2 或更高)。
检查是否正确配置了 https 和 http/2。
示例问题:
add_header x-content-type-options: nosniff;
原因:x-content-type-options: 的字段名中多了冒号。http/2 对头字段格式要求严格。
修正:
add_header x-content-type-options "nosniff";
检查是否开启了 gzip 压缩。
优化 http2_max_concurrent_streams 和 keepalive_timeout。
到此这篇关于nginx中配置http/2协议的详细指南的文章就介绍到这了,更多相关nginx配置http/2协议内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论