worker_connections不是独立参数,必须与系统nofile限制、worker_rlimit_nofile及内核参数协同配置;它定义每个worker进程的活跃连接上限,总并发数=worker_processes×worker_connections,但实际受fd资源链路全通制约,建议设为worker_rlimit_nofile的70%~80%。

worker_connections 不是独立生效的参数,它必须和系统文件描述符上限严格对齐,否则会静默降级或报错“Too many open files”。真正决定并发能力的是整条资源链路是否打通——从内核到用户、从系统限制到 Nginx 自身声明,缺一不可。
worker_connections 的真实作用
它是每个 worker 进程能同时处理的活跃连接上限,不是全局值。总理论并发数 = worker_processes × worker_connections。但这个数字只是“标尺”,不代表实际能撑住多少连接。
- 每个 TCP 连接至少占用 1 个文件描述符(fd),HTTP/2 或带 SSL 的连接可能占用更多
- 日志文件、上游连接、临时文件等也会消耗 fd,所以 worker_connections 应控制在系统 nofile 限制的 70%~80%
- 该指令必须写在 nginx.conf 的 events 块内,写错位置(如 http 或 server 块)会导致配置不生效
系统文件描述符限制必须同步放开
Linux 默认单进程最多打开 1024 个 fd。如果你设了 worker_connections 8192,但 ulimit -n 还是 1024,Nginx 启动时会自动截断,甚至无法打开错误日志。
- 临时调整:运行 ulimit -n 65536(仅当前会话有效)
- 永久生效:编辑 /etc/security/limits.conf,添加两行:
nginx soft nofile 65536
nginx hard nofile 65536 - 若用 systemd 管理 Nginx,还需在 /etc/systemd/system/nginx.service 的 [Service] 段中加:
LimitNOFILE=65536
然后执行 systemctl daemon-reload && systemctl restart nginx
worker_rlimit_nofile 是关键中间层
这是 Nginx 主动向系统申请的 fd 上限,必须显式配置,且 ≥ worker_connections,否则前面所有设置都白搭。
- 在 nginx.conf 主上下文(events 外)添加:
worker_rlimit_nofile 65536; - 该值应略大于 worker_connections,比如设为 65536,worker_connections 就不要超过 65535
- 启动时 Nginx 会检查:若 worker_rlimit_nofile > 系统允许值,会警告并自动下调;若
别忽略内核和事件模型的配合
即使 fd 资源够了,连接仍可能卡在队列里被丢弃,尤其是突发流量场景。
- listen 指令可加 backlog 参数,例如:
listen 80 backlog=65535;
但它不能超过内核参数 net.core.somaxconn(需用 sysctl 设置) - 启用 multi_accept on; 可让单次 epoll_wait 尽量多取连接,减少排队延迟
- 确保使用 use epoll;(Linux 默认,但显式写出更稳妥)


















