Nginx最大并发连接数由worker_processes×worker_connections决定,但受系统ulimit、网络状态及连接复用影响;worker_connections是每个worker进程最大文件描述符数,包含客户端与上游连接。

Nginx 的最大并发连接数不是单看 worker_connections 这一个参数就能确定的,它由多个配置共同决定,核心是:每个 worker 进程能处理的连接上限 × 当前活跃的 worker 进程数。
worker_connections 的实际含义
worker_connections 是每个 worker 进程允许打开的最大文件描述符(fd)数量。在 Nginx 中,每个 TCP 连接、每个上游连接、甚至某些日志文件句柄都会占用一个 fd。因此它本质是“每个 worker 的最大并发连接能力”,但不是绝对的并发请求数(例如 keepalive 会复用连接)。
- 默认值通常为 512 或 1024,需根据系统
ulimit -n调整,否则可能报too many open files - 该值在
events{ ... }块中设置,对所有 worker 进程统一生效 - 它不区分客户端连接和后端连接——反向代理场景下,1 个客户端请求可能占用 2 个连接(client + upstream),实际并发能力减半
真正决定最大并发的三个关键参数
最大并发连接数 = worker_processes × worker_connections,但前提是:
-
worker_processes:Nginx 启动的 worker 进程数,可设为
auto(自动匹配 CPU 核心数),或显式指定(如4) -
系统级限制:通过
ulimit -n查看当前用户允许打开的最大文件数,必须 ≥worker_processes × worker_connections -
网络连接状态影响:TIME_WAIT、CLOSE_WAIT 等状态会占用端口和 fd;高并发下若未优化内核参数(如
net.ipv4.tcp_tw_reuse),可能提前耗尽资源
如何验证和调优
别只改配置,要结合监控和系统限制一起看:
- 运行
nginx -t确认语法正确,再nginx -s reload生效 - 查当前 worker 数:
ps -ef | grep nginx | grep -v grep | wc -l(主进程不计) - 查每个 worker 打开的连接数:
ss -s或lsof -p [worker_pid] | wc -l - 观察错误日志:
tail -f /var/log/nginx/error.log,留意accept() failed (24: Too many open files) - 必要时调大系统限制:在
/etc/security/limits.conf中添加nginx soft nofile 65536和nginx hard nofile 65536
一个典型计算示例
假设配置如下:
worker_processes auto;
events {
worker_connections 4096;
}
服务器为 8 核 CPU,则启动 8 个 worker 进程 → 理论最大并发连接数 = 8 × 4096 = 32768。
但注意:如果启用了 keepalive 且平均每个连接处理 10 个请求,实际 QPS 可能远高于此数值;反之,若大量短连接 + 反向代理,真实并发能力可能只有 1.5 万左右。










