http2_max_concurrent_streams用于限制单个HTTP/2连接的最大并发流数,默认128,需Nginx≥1.9.5、启用HTTPS及listen ssl http2配置,不控制连接数或后端并发。
在 Nginx 中,
用于控制单个 HTTP/2 连接上允许的最大并发流(stream)数量,它不直接限制客户端连接数或请求总数,而是约束“一个连接内能同时处理多少个请求”。合理设置该值可缓解资源争抢、防止个别连接过度占用服务端线程或内存。
这个指令的作用范围和生效前提
该指令仅对启用了 HTTP/2 的 server 块或 http 块有效,且必须满足以下条件才会起作用:
Nginx 版本 ≥ 1.9.5(HTTP/2 支持从该版本正式引入)
SSL/TLS 已启用(HTTP/2 在 Nginx 中强制要求 HTTPS)
server 块中配置了
参数,例如:
客户端实际使用 HTTP/2 协议发起连接(可通过浏览器开发者工具的 Network → Protocol 列确认)
典型配置方式与取值建议
可在
、
或
块中设置,推荐放在
块内以实现更精细的控制:
}
默认值是 128。常见调整场景:
后端处理能力较弱(如 PHP-FPM 进程数有限),可设为 32–64,避免单连接压垮上游
静态资源服务(高吞吐、低延迟),可适当提高至 256,提升复用效率
存在大量长轮询或 Server-Sent Events(SSE)连接时,应调低(如 16–32),防止流长期占位
它和其它并发限制的区别
需注意它不等同于以下机制:
不是连接数限制
:不限制客户端能建多少 TCP 连接,只限制每个连接内的并发流数
不替代 limit_conn / limit_req
:后者控制 IP 级连接或请求频率,属于全局或客户端维度限流
不控制后端并发
:即使设为 10,若 client 开 10 个连接,仍可能向后端发 100 个请求;需配合
、
等协同优化
验证是否生效
可通过以下方式确认配置已加载且被客户端遵守:
重启 Nginx 后执行
和
用支持 HTTP/2 的 curl 测试:
,观察响应头是否含
在高并发压测中,抓包分析 TCP 流中的 GOAWAY 帧或 RST_STREAM 错误码(如
),可能是触发了流数上限
查看 Nginx error log,当流超限时会记录类似:
(需结合日志级别和调试开启)
http2_max_concurrent_streamshttp2listen 443 ssl http2;httpserverlocationserverserver {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 单个 HTTP/2 连接最多同时处理 100 个请求(流)
http2_max_concurrent_streams 100;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
}proxy_max_temp_file_sizeupstream keepalivenginx -tnginx -s reloadcurl -I --http2 https://your-domain.comHTTP/2 200ENHANCE_YOUR_CALMclient closed stream prematurely while sending request to upstream