启用 reuseport 可使内核在连接接入阶段将 TCP 连接均匀分发至各 Nginx worker 进程,避免监听 socket 争抢,提升短连接吞吐量;需满足内核 ≥3.9、Nginx ≥1.9.1、worker_processes 配置合理且同 IP:Port 所有 listen 行统一启用 reuseport,并调优 somaxconn 等内核参数。

直接在 listen 指令末尾加上 reuseport,就能让内核在连接接入阶段就把新 TCP 连接均匀分发到各个 Nginx worker 进程,避免多个进程争抢同一个监听 socket,从而显著提升短连接吞吐量。
基础配置写法
每个需要启用的监听端口都显式添加 reuseport:
listen 80 reuseport;listen 443 ssl http2 reuseport;- 若监听多个 IP,每条都要写全,例如:
listen 192.168.10.10:80 reuseport;listen 192.168.20.10:80 reuseport;
必须满足的前提条件
缺一不可,否则会静默失效或启动报错:
- Linux 内核 ≥ 3.9(推荐 4.4+),运行
uname -r确认 - Nginx ≥ 1.9.1(OpenResty 建议 ≥ 1.15.8.2)
-
worker_processes auto;或设为 CPU 物理核心数(不能少于核心数) - 同一 IP:Port 组合的所有
listen行必须统一启用reuseport,混用会报错
配套系统参数调优
仅配 Nginx 不够,需同步调整内核网络参数:
-
net.core.somaxconn = 65535:扩大全连接队列上限 -
net.ipv4.tcp_max_syn_backlog = 65535:扩大半连接队列 -
net.core.netdev_max_backlog = 5000:防止软中断丢包 - 执行
sysctl -p生效,或写入/etc/sysctl.conf
验证是否生效
重启 Nginx 后,用以下命令确认:
-
ss -tlnp | grep :80—— 应看到多行输出,每行对应一个 worker 进程 PID -
ps aux | grep nginx—— worker 进程数应与worker_processes一致 - 压测时观察
perf top,accept相关锁函数调用应大幅减少










