启用 reuseport 可使 https 新连接由内核自动分发至多个 worker 进程,避免 accept 竞争,短连接吞吐提升 3 倍以上;需 ipv4/ipv6 所有 listen 行统一添加 reuseport,配合内核 ≥3.9、nginx ≥1.9.1、worker_processes auto 及调大 somaxconn 等参数。

直接在 Nginx 的 listen 443 ssl 后加上 reuseport,再配齐系统级参数,就能让 HTTPS 新连接由内核自动分发到多个 worker 进程,绕过传统 accept 竞争,实测短连接吞吐提升 3 倍以上。
所有监听行必须统一启用 reuseport
不是加一次就行,而是同一端口的所有 listen 指令都得带上:
– IPv4 和 IPv6 要分别写全:listen 443 ssl http2 reuseport;listen [::]:443 ssl http2 reuseport;
– 若绑定多个 IP(如 10.0.1.10:443 和 10.0.2.10:443),每条都要单独加 reuseport;
– 混用(比如一个开、一个关)会导致 Nginx 启动失败,配置校验通不过。
四项前提缺一不可
- Linux 内核 ≥ 3.9(生产建议用 4.4+ 或 6.1,后者对 PREEMPT_RT 路径有深度优化)
- 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 持久化。
辅助调优进一步释放性能
- 显式关闭用户态锁:
accept_mutex off;(reuseport 已从内核层解决惊群,再开反而引入竞争) - 绑定 CPU 核心:
worker_cpu_affinity auto;,让每个 worker 固定运行在独立核心 - 扩大文件描述符上限:
worker_rlimit_nofile 1048576;,并同步调整系统级fs.file-max - listen 中可显式设 backlog:
listen 443 ssl http2 reuseport backlog=65535;











