直接在 Nginx 的 listen 指令后加 reuseport 并调优内核参数,可使 HTTPS 新连接在多核间并行接入,避免争抢与锁开销,实测短连接吞吐提升 3 倍以上;需满足内核 ≥3.9、Nginx ≥1.9.1、worker_processes 匹配物理核心数、同一 IP:Port 所有 listen 行统一启用 reuseport,并同步调大 somaxconn 等内核队列参数。

直接在 Nginx 的 listen 指令后加 reuseport,再配合系统级调优,就能让 HTTPS 新连接在多个 CPU 核心间真正并行接入,避免争抢、减少锁开销,实测短连接吞吐可提升 3 倍以上。
基础配置:每个 HTTPS 监听都显式启用 reuseport
不是加一次就行,而是所有监听同一端口的 listen 行都必须统一带上 reuseport,否则会报错或静默失效:
listen 443 ssl http2 reuseport;-
listen [::]:443 ssl http2 reuseport;(IPv6 同样需要) - 若绑定多个 IP,每条都要写全:
listen 10.0.1.10:443 ssl reuseport;、listen 10.0.2.10:443 ssl reuseport;
前提条件:缺一不可
reuseport 不是开关,而是一套协同机制,以下四点必须同时满足:
- 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 不够
内核连接队列不放大,reuseport 就像高速公路只修了入口却堵在收费站。关键参数需同步调整:
-
net.core.somaxconn = 65535(全连接队列上限) -
net.ipv4.tcp_max_syn_backlog = 65535(半连接队列) -
net.core.netdev_max_backlog = 5000(软中断收包队列,防丢包) - 执行
sysctl -p生效,并写入/etc/sysctl.conf持久化
验证是否真正生效
别只看配置文件,要观察运行态行为:
- 执行
ss -tlnp | grep :443:应看到多行输出,每行对应一个 worker 进程 PID(例如 8 个 worker 就有 8 行) - 执行
ps aux | grep nginx:确认 worker 进程数与worker_processes一致 - 压测时用
perf top观察:如果sys_accept4、inet_csk_accept等函数调用明显下降,说明 accept 锁争用大幅缓解


















