reuseport的核心作用是让多个Nginx worker进程各自创建独立监听socket,由内核按五元组哈希分发新连接,避免accept争抢和惊群效应;需满足内核≥3.9、Nginx≥1.9.1且同端口所有listen行统一启用。

reuseport 的核心作用是让多个 Nginx worker 进程各自创建独立的监听 socket,由内核按五元组哈希分发新连接,从而避免争抢和惊群效应。它不是为“多虚拟主机”设计的,而是针对“多 worker 进程监听同一端口”这一场景的内核级优化。
前提条件必须满足
启用 reuseport 不是加个参数就生效,以下三点缺一不可:
- Linux 内核 ≥ 3.9(推荐 4.19+ 或更新稳定版)
- Nginx ≥ 1.9.1,且编译时未禁用 reuseport 支持(主流发行版默认开启)
- 所有 listen 指令对同一 IP+端口组合必须统一启用 reuseport,不能部分开、部分关;否则 Nginx 启动会失败
配置写法与关键细节
在 server 块或 http 块顶层的 listen 指令中添加 reuseport 参数即可,例如:
server {
listen 80 reuseport;
listen 443 ssl reuseport;
# 注意:若同时监听 IPv6,也要写成 listen [::]:80 reuseport;
}注意要点:
- reuseport 是 listen 的修饰符,不接受值(不要写成
reuseport on) - 同一端口的所有 listen 行(如 80 和 [::]:80)都必须带 reuseport,否则配置校验失败
- 无需改动 worker_processes 数量,但建议设为 CPU 核心数,才能真正发挥多 socket 并行优势
配合其他机制效果更佳
reuseport 单独启用已能显著降低 accept 争抢,但结合以下设置可进一步释放性能:
- 关闭
accept_mutex on(Nginx 默认在低并发下开启),因为 reuseport 已从内核层解决争抢,再启 mutex 反而增加锁开销 - 启用
worker_cpu_affinity auto;,让每个 worker 绑定到独立 CPU 核,减少跨核缓存失效 - 搭配多队列网卡(RSS/RPS)使用,使中断、软中断、worker 处理尽量落在同一 NUMA 节点,提升缓存局部性
验证是否生效
启动后可通过以下方式确认:
- 执行
ss -tlnp | grep :80,应看到多个进程(每个 worker 一个)分别监听*:80,PID 各不相同 - 检查 Nginx error log,无 “
reuseport is not supported” 或绑定冲突报错 - 高并发压测时观察
top中各 worker CPU 利用率是否相对均衡,而非单 worker 拉满

















