Nginx多进程负载均衡通过底层事件分发机制实现,核心是避免惊群效应:reuseport(内核哈希分发)为首选,accept_mutex(排队抢锁)作兼容兜底,辅以ngx_accept_disabled动态避让空闲连接。

Nginx 多进程负载均衡本身不是靠“算法分配请求”实现的,而是通过底层事件分发机制控制新连接如何落到 worker 进程上。避免惊群效应(thundering herd)是其中最关键的一步——它不解决后端服务器间的流量分发,而是解决“谁来 accept 新 TCP 连接”这个源头问题。
合理设置 worker 进程数量
进程数过多会加剧争抢,过少则无法压满 CPU。推荐配置方式:
- worker_processes auto; —— 自动识别物理 CPU 核心数(非超线程数),例如 4 核机器就启 4 个 worker
- 若需手动指定,写成 worker_processes 4; 即可,不要设为 8、16 等远超核心数的值
- 配合 worker_cpu_affinity auto;(Linux),让每个 worker 绑定独立核心,减少上下文切换和缓存抖动
启用 reuseport(现代高并发首选)
这是 Linux 3.9+ 内核提供的内核级连接分发机制,比 accept_mutex 更高效、更均衡:
- 在 events { ... } 块中添加:reuseport on;
- 必须搭配 use epoll; 和 multi_accept on; 才能发挥全部效果
- 每个 worker 拥有独立 listen socket,内核按四元组哈希直接派发连接,彻底规避争抢
accept_mutex 作为兼容性兜底(旧环境或需精细控制时)
虽然 reuseport 是主流推荐,但在某些内核版本或容器环境中可能受限,此时可启用该锁机制:
- 保持 accept_mutex on;(默认即开启,无需额外写)
- 它让 worker 排队获取 accept 锁,拿到锁的才去调用 accept(),其余专注处理已有连接
- 注意:1.11.3+ 版本默认关闭该机制,因 reuseport 更优;如启用,建议同时配 accept_mutex_delay 100ms; 防止空转等待过久
动态连接避让:ngx_accept_disabled 自动生效
这是 Nginx 内置的轻量级被动均衡机制,无需配置但依赖合理参数:
- 当某 worker 已用连接 ≥ worker_connections 的 7/8 时,自动设 ngx_accept_disabled > 0
- 该 worker 主动放弃抢锁,只处理已有连接,把新连接机会让给更空闲的进程
- 确保 worker_connections 设置足够(如 2048 或 10240),否则该机制容易误触发



















