nginx events块配置的是事件驱动模型而非“工作模型”,核心是use指令(如use epoll;)和worker_connections,需匹配系统fd限制并协同multi_accept与accept_mutex优化连接调度。

events 块不配置“工作模型”,它配置的是事件驱动模型(event model),也就是 Nginx 底层如何监听和响应网络连接变化。所谓“工作模型”是常见误解,Nginx 本身没有 Apache 那样的 prefork 或 worker 模型;它的并发模型由 events 块中两个核心指令协同决定:一个是底层 I/O 多路复用机制(use),另一个是单进程连接承载能力(worker_connections)。
明确指定事件驱动模型(use 指令)
Linux 系统必须显式设置 use epoll;,否则会回退到低效的 select 模型,严重影响高并发性能。
- 绝大多数现代 Linux 发行版(内核 ≥2.6)推荐:
use epoll; - FreeBSD/macOS 使用:
use kqueue; - 旧系统或调试环境才考虑:
use select;或use poll;(不建议生产使用) - 该指令只能出现在
events块内,且每个配置文件中仅能出现一次
匹配系统资源限制设置连接数(worker_connections)
这个值不是孤立调大的,必须与系统级文件描述符限制(ulimit -n)和 worker 进程数(worker_processes)协调。
- 典型配置:
worker_connections 1024;(适合 HTTP 明文服务) - HTTPS 服务建议调低至
512~768,因 SSL 握手消耗更多内存和句柄 - 最大理论并发连接数 =
worker_processes × worker_connections - 若启用反向代理,实际可用连接数约为该值的一半(因每个客户端请求需占用一个到 client + 一个到 backend 的连接)
配合调度行为优化(multi_accept 和 accept_mutex)
这两个参数控制连接接收节奏,对突发流量敏感场景有实际影响。
-
multi_accept on;:允许单次事件循环中接受多个新连接,提升吞吐,但可能加剧惊群效应 -
accept_mutex on;(默认开启):启用连接获取互斥锁,避免多个 worker 同时争抢新连接,更均衡但略降吞吐 - 两者通常不同时开启;高负载下可尝试
multi_accept on;+accept_mutex off;,但需实测验证稳定性
完整示例(Linux 生产环境常用)
以下是最小可行且稳定的 events 块配置:
events {use epoll;
worker_connections 1024;
multi_accept on;
}











