高频短连接优化核心是轻量化连接生命周期、高效复用资源、紧密协同内核:禁用keepalive、设keepalive_timeout 0、启用reset_timedout_connection;调高文件描述符限制;显式use epoll并开启multi_accept;合理设置worker_processes与worker_connections。

高频短连接对 Nginx 的压力主要来自连接频繁建立与关闭带来的系统调用开销、文件描述符快速耗尽、TIME_WAIT 积压及上下文切换加剧。优化核心不是“扛住更多连接”,而是让连接生命周期更轻、资源复用更高效、内核协同更紧密。
收紧连接生命周期,避免资源滞留
短连接本就不该复用,但默认的 keepalive_timeout(通常 60–75 秒)会让已关闭的连接在 worker 中空占 slot,拖慢吞吐。必须主动切断长连接惯性:
-
禁用 HTTP Keepalive:设
keepalive_timeout 0;,强制每次响应后立即断连 - 关闭 keepalive_requests:无需配置(因 timeout=0 时该指令无效),避免误解残留
-
启用连接重置机制:添加
reset_timedout_connection on;,快速回收异常挂起的连接槽位
匹配系统限制,释放并发上限
worker_connections 再大也受制于操作系统单进程文件描述符上限(ulimit -n)。高频短连接下,连接创建/销毁极快,文件描述符成为第一瓶颈:
- 检查当前限制:
cat /proc/$(pgrep nginx)/limits | grep "Max open files" - 永久放宽:在
/etc/security/limits.conf中添加
nginx soft nofile 65536
nginx hard nofile 65536 - 同步配置 Nginx:
worker_rlimit_nofile 65536;(写在 events 外层)
调优事件模型与接收行为
Linux 下默认 epoll 已足够,但需配合两个关键动作减少系统调用和调度抖动:
-
显式启用 epoll:在
events{}块中写use epoll;(虽默认,但显式可防误配) -
开启批量接受:
multi_accept on;—— 允许单次 epoll_wait 返回后,一次性 accept 多个新连接,显著降低短连接洪峰时的 syscall 次数
控制并发总量,防止过载雪崩
盲目堆高 worker_connections 可能引发 CPU 调度竞争或内存碎片。建议按实际硬件收敛设置:
-
worker_processes auto;(自动匹配 CPU 核心数,不建议超核数) -
worker_connections 8192;或16384(非必须拉到 65535;实测中 8K–16K 在多数 8–32 核机器上吞吐更稳) - 如需硬限流,用
limit_conn perserver 20000;防止单机被突发打穿











