max_conns用于限制nginx到单台后端服务器的最大并发连接数,默认值0表示不限制,仅在least_conn或ip_hash策略下生效,需nginx≥1.11.5且配合keepalive使用才有效。

直接在 upstream 块中为每个 server 添加 max_conns 参数,就能限制 Nginx 到该后端的并发连接数,从而防止后端因连接堆积而崩溃。
max_conns 的作用和基本用法
该参数控制 Nginx 与单台后端服务器之间**最大允许的活跃连接数**。超过这个数的请求会被排队或转发到其他可用节点(取决于负载均衡策略),而不是强行建立新连接。
- 默认值是 0,表示不限制连接数
- 必须配合多个 worker 进程使用才有效;但要注意:总连接数 = 每个 worker 的连接数 × worker 数量,所以实际限制效果受
worker_processes影响 - 适用于 Nginx 1.11.5 及以上版本(开源版已支持,无需商业许可)
典型配置示例
以下配置限制每台 Tomcat 最多接受 2 个并发连接:
upstream tomcats {
server 192.168.1.3:8080 max_conns=2;
server 192.168.1.4:8080 max_conns=2;
server 192.168.1.5:8080 max_conns=2;
}
搭配反向代理使用时,Nginx 会自动避开已达上限的节点,把新请求分给还有余量的服务器。
配合健康检查提升防护效果
仅靠 max_conns 不足以应对所有过载场景,建议同步启用故障检测机制:
- 加上
max_fails=2 fail_timeout=15s,让 Nginx 在连续失败后主动剔除异常节点 - 设置
proxy_next_upstream error timeout http_500 http_502 http_503 http_504,确保上游返回错误响应时能重试其他节点 - 避免将
max_conns设得过高(比如远超后端应用线程池大小),否则仍可能压垮服务
注意事项
这个参数不是万能开关,使用时需结合后端真实承载能力来设定:
- 如果后端是 Java 应用,参考其 Tomcat 的
maxThreads或线程池大小,max_conns建议设为该值的 70%~90% - 若后端启用了连接池(如 HikariCP),也要预留一定连接给数据库等内部调用
- 注意监控 Nginx 的
upstream_addr日志,观察是否频繁出现 “no live upstreams” 或连接被拒绝的情况










