worker_connections是每个worker进程的活跃连接上限,总并发数=worker_processes×worker_connections,须置于events块中并同步调高系统文件描述符限制。

Nginx 的 worker_connections 并不是全局最大连接数,而是每个 worker 进程能同时处理的**活跃连接上限**,实际总并发能力 = worker_processes × worker_connections。它受操作系统文件描述符限制(ulimit -n)和 Nginx 自身配置共同约束,配得再高,系统不放行也无效。
worker_connections 放在哪?怎么写?
该指令必须放在 events 块中,不能写在 http、server 或 location 里:
events {
worker_connections 1024;
}
数值建议为整数,常见值有 1024、2048、4096、8192。注意:单个 worker 进程无法突破此值,超限的新连接会被拒绝(返回 503 或直接断连)。
必须同步调整系统文件描述符限制
Nginx 每个连接至少占用 1 个文件描述符(HTTP/1.1 可能更多),若系统默认 ulimit -n 是 1024,即使设了 worker_connections 4096,启动时也会报错或静默降级。
- 临时生效(当前会话):
ulimit -n 65535 - 永久生效(推荐):修改
/etc/security/limits.conf,添加两行:
nginx soft nofile 65535
nginx hard nofile 65535
(假设 Nginx 以用户nginx运行;若用 root 启动,则需设root行) - systemd 环境还需在
/etc/systemd/system/nginx.service.d/override.conf中加:
[Service]
LimitNOFILE=65535
然后执行systemctl daemon-reload && systemctl restart nginx
别忘了 worker_processes 的配合
worker_connections 是“每个进程”的上限,总容量还取决于 worker_processes 数量:
- 设为
auto(推荐):Nginx 自动匹配 CPU 核心数 - 手动指定(如
worker_processes 4;)时,确保4 × worker_connections ≤ 系统可用 fd 总数 - 高并发场景下,过多 worker 进程反而增加上下文切换开销;一般不超过 CPU 逻辑核心数
检查是否生效 & 常见误区
重启后运行:nginx -t 验证语法,再用 ps -eo comm,fdcount | grep nginx 查看各 worker 进程当前打开的 fd 数;或通过 lsof -p $(cat /var/run/nginx.pid) | wc -l 辅助观察。
- 误区:以为调大
worker_connections就能无限扛流量 → 实际还受限于内存、网络带宽、后端响应速度 - 误区:只改 Nginx 配置不调系统 limit → 启动日志可能出现
could not open error log file: open() "/var/log/nginx/error.log" failed (24: Too many open files) - 误区:在非 events 块里写该指令 → Nginx 启动失败,报
unknown directive "worker_connections"










