worker_connections必须置于events块内,不可在http、server等块中使用;需同步调优系统file-max、limits.conf及worker_rlimit_nofile三层fd限制,并配合use epoll;、multi_accept on;及合理worker_processes值。

worker_connections 必须放在 events 块里,不能写在 http、server 或 location 中,否则会报错或不生效。
必须写在 events 块内
这是硬性位置要求。正确写法如下:
events {
use epoll;
worker_connections 8192;
multi_accept on;
}
- 如果误写到
http块里,Nginx 启动时会提示unknown directive "worker_connections" -
use epoll;在 Linux 上必须显式加上,否则可能回退到低效的select,且有 1024 连接硬限 -
multi_accept on;能让一个 worker 在一次事件循环中尽可能多地接收新连接,缓解突发流量排队
数值设置要匹配实际资源
常见值有 1024、2048、4096、8192,但不是越大越好:
- 每个连接约占用 2–4 KB 内存,8 GB 内存服务器建议单 worker 不超过 16384
- 短连接密集型(如 API、秒杀页):可设 4096–16384,配合较短的
keepalive_timeout - 长连接型(如 WebSocket、HTTP/2):建议 2048–8192,重点保障 fd 资源充足
- HTTPS 反向代理:因 SSL 缓存、OCSP 等额外开销,建议不超过单进程 ulimit 的 70%~80%
必须同步配置三层文件描述符限制
worker_connections 的效果取决于三者最小值:系统总上限、用户级限制、进程级声明。
-
系统级:
sysctl -w fs.file-max=2097152(建议设为worker_processes × worker_connections × 1.3~1.5) -
用户级:在
/etc/security/limits.conf中添加
nginx soft nofile 65536
nginx hard nofile 65536 -
进程级:在
nginx.conf主块(events外、http前)加
worker_rlimit_nofile 65536;(值应 ≥ worker_connections)
别忘了 worker_processes 的配合
总并发能力 = worker_processes × worker_connections,所以两者要配平:
- 推荐设为
auto,Nginx 自动匹配 CPU 逻辑核心数 - 手动指定时(如
worker_processes 4;),确保4 × worker_connections ≤ 系统可用 fd 总数 - 过多 worker 进程反而增加上下文切换开销,一般不超过 CPU 逻辑核心数











