启用 reuseport 可使每个 worker 进程独立监听 socket,由内核按四元组哈希分发连接;需 ipv4/ipv6 全部配置 reuseport,配合关闭 accept_mutex、增大内核及 nginx 队列、绑定 cpu 核心等调优,才能实现均衡接入与低延迟轮询。

直接在 listen 指令末尾加上 reuseport,就能让每个 worker 进程持有独立监听 socket,由内核按四元组哈希分发新连接——这不是轮询算法的增强,而是从连接接入源头消除瓶颈,为轮询提供更均衡、更低延迟的请求输入基础。
reuseport 必须统一启用,不能只配部分 listen 行
同一 IP+端口组合的所有监听配置,都要显式带上 reuseport,否则 Nginx 启动失败:
- ✅
listen 80 reuseport; - ✅
listen [::]:80 reuseport;(IPv6 不能漏) - ✅
listen 443 ssl http2 reuseport; - ✅
listen [::]:443 ssl http2 reuseport; - ❌ 只写 IPv4 的
reuseport而忽略 IPv6,或混用(如一条带、一条不带),会触发配置校验错误
配套调优才能让轮询真正跑得起来
轮询本身只管请求分发,但若连接接入不均、队列堆积、CPU 分散,后端再均衡也白搭:
- 关闭
accept_mutex off;(reuseport已接管连接分发,该锁冗余且有害) - 放大内核队列:
net.core.somaxconn = 65535、net.ipv4.tcp_max_syn_backlog = 65535 - Nginx listen 显式设
backlog=65535,例如:listen 80 reuseport backlog=65535; -
worker_processes auto;且worker_cpu_affinity auto;,确保每个 worker 绑定独立物理核心
验证是否生效,看三处关键信号
-
ss -tlnp | grep :80应输出多行,每行 PID 不同(代表多个 worker 各自监听) - error.log 中无
reuseport not supported或地址冲突报错 - 压测时各 worker 的 CPU 占用和
nginx -s stats中的 request count 更接近,首包延迟抖动明显收敛
不复杂但容易忽略











