要让Nginx单机稳定承载十万级代理连接,需协同调优worker_processes、worker_connections、系统ulimit、内核参数及上游复用策略。例如8核设worker_processes auto,worker_connections 32768,worker_rlimit_nofile 65535,somaxconn=65535,tcp_max_syn_backlog=131070,fs.file-max≥400000,并启用tcp_tw_reuse与HTTP/1.1连接复用。

要让 Nginx 单机稳定承载十万级代理连接,worker_connections 不能单独调大,必须与系统资源、内核参数、Nginx 进程模型形成闭环调优。否则极易出现 accept() failed (24: Too many open files)、连接丢弃、502/503 或压测失真等问题。
匹配 CPU 与 worker_processes 数量
worker_connections 的实际效果依赖于 worker 进程数。过多进程会增加上下文切换开销,过少则无法并行处理连接。
- 用
nproc或grep -c 'processor' /proc/cpuinfo查看逻辑核心数(例如 8 核) - 配置
worker_processes auto;(推荐),或显式写为worker_processes 8; - 避免设为远超核心数的值(如 32),尤其在高吞吐代理场景下,易引发锁竞争和缓存抖动
合理设置 worker_connections 值并保障文件描述符供给
单个 worker 进程能管理多少连接,取决于它能打开多少文件描述符——这既是系统限制,也是 Nginx 自身配置约束。
- 目标总并发 ≈ 10 万 → 若
worker_processes 8,则worker_connections至少需设为 12500(100000 ÷ 8),建议取整为 16384 或 32768,留出余量 - 必须同步配置
worker_rlimit_nofile 65535;(该值 ≥ worker_connections) - 系统级 ulimit 需到位:在
/etc/security/limits.conf中添加* soft nofile 65535<br>* hard nofile 65535
并确保启动 Nginx 的用户(如 www-data 或 nginx)生效 - 验证方式:
ps -eo pid,comm,rlimit | grep nginx查看进程实际限制
协同调优关键内核参数
即使 Nginx 和系统允许十万连接,内核网络栈若“卡在门口”,连接仍会被无声丢弃。
-
net.core.somaxconn:监听 socket 的已完成连接队列长度,应 ≥worker_connections / worker_processes,建议统一设为 65535
→ 写入/etc/sysctl.conf并执行sysctl -p -
net.ipv4.tcp_max_syn_backlog:SYN 半连接队列,建议设为somaxconn的 2 倍(如 131070) -
fs.file-max:全系统文件描述符上限,建议 ≥worker_processes × worker_connections × 1.3(例如 8 × 32768 × 1.3 ≈ 34 万),设为 400000 更稳妥 - 启用
net.ipv4.tcp_tw_reuse = 1,缓解代理场景下大量 TIME-WAIT 端口耗尽问题
验证与持续观察要点
调完不验证,等于没调。真实连接健康度比配置数字更重要。
- 启用
ngx_http_stub_status_module,访问/nginx_status观察 Active connections 是否长期稳定在 7–9 万区间(而非峰值冲到 10 万后骤降) - 用
ss -s查看tcp:行中inuse(当前 ESTABLISHED 连接)是否接近somaxconn;若orphans或tw异常高,说明队列或回收机制瓶颈 - 代理场景特别关注上游连接复用:
proxy_http_version 1.1;+proxy_set_header Connection '';,避免每请求建新连接放大句柄消耗










