worker_connections需与系统文件描述符、用户/进程限制及epoll事件模型对齐,否则报“Too many open files”;须设worker_rlimit_nofile、limits.conf、systemd LimitNOFILE,并启用multi_accept与accept_mutex优化。

直接在 events 块里设 worker_connections 和 use 即可,但不能只改这两个值——它们必须和系统资源、Nginx 进程限制对齐,否则要么不生效,要么报 “Too many open files”。
worker_connections 的设置要点
它表示每个 worker 进程最多能同时处理的连接数(含 keepalive 空闲连接),不是全局并发上限,而是单进程上限。实际效果取决于三者中的最小值:
- 系统总文件描述符上限:
/proc/sys/fs/file-max,建议设为worker_processes × worker_connections × 1.3~1.5 - 用户级限制:在
/etc/security/limits.conf中为 Nginx 用户(如nginx)添加两行:nginx soft nofile 65536nginx hard nofile 65536 - 进程级声明:在
nginx.conf主块(events外、http前)加:worker_rlimit_nofile 65536;,该值应 ≥worker_connections
事件模型必须显式指定 use epoll
Linux 下必须写 use epoll;,否则 Nginx 可能回退到 select 或 poll,触发 1024 的硬限制。这不是可选项,是必要动作。
-
epoll是 Linux 最高效的选择,支持边缘触发(ET)模式,适合高并发 - 不要依赖“自动选择”——Nginx 在某些旧内核或容器环境下可能误判
- 如果用 systemd 启动,还需在
/etc/systemd/system/nginx.service中加:LimitNOFILE=65536,然后运行systemctl daemon-reload
配套参数建议同步开启
单独调大 worker_connections 没意义,需搭配以下配置才能真正释放并发能力:
-
multi_accept on;:让 worker 一次接受所有就绪连接,避免连接积压 -
accept_mutex off;:在 Nginx 1.11.3+ 版本中默认已优化,高并发下可关闭互斥锁减少争抢 - 若跑 HTTPS,
worker_connections建议不超过 ulimit 的 70%~80%,预留 fd 给 SSL session cache、OCSP stapling 等
按业务类型参考取值范围
数值不是越大越好,过高会增加内存占用(每个连接约几 KB)和上下文切换开销:
- 短连接密集型(API、CDN 回源、秒杀页):4096–16384,配合
keepalive_timeout 0或 15–30s - 长连接保活型(WebSocket、HTTP/2 上报、直播流):2048–8192,
keepalive_timeout设为 30–75s - HTTPS 反向代理:不超过单进程 ulimit 的 80%,例如 ulimit=65536,则
worker_connections ≤ 52428


















