max_conns需Nginx≥1.11.5、least_conn或ip_hash策略、至少两台server、启用keepalive才生效;配置示例为upstream块中server行设max_conns=160,并配合proxy_http_version 1.1等长连接设置。

直接在 upstream 块的 server 行中添加 max_conns=数值 即可,但必须满足几个硬性前提,否则配置无效。
必须满足的生效条件
这个参数不是写上就起作用,它只在以下全部满足时才真正参与调度:
- Nginx 版本 ≥ 1.11.5(开源版已支持,无需 Plus 许可)
- upstream 使用 least_conn 或 ip_hash 负载策略(round_robin 默认策略不识别 max_conns)
- upstream 至少配置了两台后端 server(单节点时无法触发连接分流逻辑)
- 启用了
keepalive指令(否则短连接下连接瞬建瞬断,max_conns 几乎无法被持续触达)
基础配置写法
例如限制每台 Tomcat 最多接受 160 个并发连接:
upstream tomcats {
least_conn; # 必须显式声明
keepalive 64; # 推荐设为 max_conns 的 30%~50%,避免空闲连接占位
<pre class="brush:php;toolbar:false;">server 192.168.1.10:8080 max_conns=160;
server 192.168.1.11:8080 max_conns=160;}
再配合 proxy location 中启用长连接:
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection '';
}
让限流更可靠的关键增强项
仅设 max_conns 容易直接丢请求,建议叠加以下配置提升可用性:
- 加
queue=10 timeout=30s(Nginx ≥ 1.23.3):超量请求排队等待,而不是立刻返回 502/503 - 配健康检查:
max_fails=2 fail_timeout=15s,自动剔除响应迟缓或失败节点 - 开启错误重试:
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 - 数值参考后端真实能力:如 Tomcat 的
maxThreads=200,则max_conns建议设为 160~180(80%~90%)
怎么确认它真在工作
不能只看配置,要靠数据验证:
- 开启
stub_status,访问/nginx_status查看各 server 的 active connections 是否稳定在设定值附近 - 压测时观察 error log 是否出现
upstream queue is full或no live upstreams - 用自定义日志记录
$upstream_connect_time和$upstream_response_time,看连接建立是否明显变慢 - 对比前后端监控:Tomcat 的
currentThreadsBusy是否不再突破上限、5xx 错误率是否下降











