错误“worker_connections are not enough”表明nginx单个worker进程连接池耗尽,本质是并发连接数超过限制,需同步调优ulimit、worker_rlimit_nofile和worker_connections三者匹配,理论最大并发数=worker_processes×worker_connections。

这个错误说明 Nginx 的单个 worker 进程已无法处理当前并发连接需求,本质是连接池耗尽。它常伴随 502、504、连接拒绝或响应延迟,但后端服务本身可能完全正常。解决关键不在后端扩容,而在理清 Nginx 自身的连接能力限制和系统资源边界。
确认当前瓶颈点
不要直接调大数值。先查三处实际限制:
- 运行
ulimit -n,看当前 shell 下打开文件数软限制(如显示 1024,就是硬伤) - 运行
cat /proc/sys/fs/file-max,看系统级最大文件句柄总数 - 检查 nginx.conf 中
worker_rlimit_nofile和worker_connections的当前值
如果日志里出现类似 20000 worker_connections are more than open file resource limit: 1024 的警告,说明 worker_connections 已超出 ulimit -n 或 worker_rlimit_nofile,此时调高前者无效。
同步调整系统与 Nginx 层限制
必须让三层限制匹配:系统允许 → Nginx 进程允许 → 单个 worker 允许。
- 永久提升系统文件句柄上限:编辑
/etc/security/limits.conf,追加两行
* soft nofile 65535
* hard nofile 65535
保存后需重新登录 SSH 才生效 - 在 nginx.conf 的 main 块(即 events 上方)添加:
worker_rlimit_nofile 65535; - 在
events { ... }块内修改:
worker_connections 10240;
(常见安全值:8192~16384;不建议盲目设到几十万,需结合 CPU 和内存评估)
验证配置与并发容量
修改后务必验证是否真正生效:
- 执行
nginx -t检查语法 - 执行
nginx -s reload平滑重载 - 计算理论最大连接数:
max_clients = worker_processes × worker_connections
例如:4 核服务器设worker_processes auto;(通常启 4 个进程),配worker_connections 10240,则理论支持约 40960 并发连接 - 注意:反向代理场景下,每个客户端连接 + 每个 upstream 连接都会占用一个
worker_connections计数,实际可用值约为理论值的 70%~80%
补充注意事项
某些特殊环境需额外处理:
- Windows 下官方 nginx 不支持高并发,需改用 nginx for Windows 的专用版本(非标准编译版)
- 使用 Rancher、K3s 等平台时,Nginx 往往作为 ingress controller 内置,需通过 Helm values 或平台 UI 修改其配置模板,而非直接改宿主机 nginx.conf
- 若业务含大量 WebSocket 或长轮询,连接持续时间长,
worker_connections需按平均连接时长 × QPS 估算,不能只看峰值 QPS










