要让Nginx真正撑住高并发,必须系统层、内核层、Nginx配置三层联动:放开文件描述符限制(如ulimit -n 65535)、调优内核参数(如net.core.somaxconn=65535、tcp_tw_reuse=1)、合理配置worker_processes auto、worker_cpu_affinity auto、worker_connections 10240及events模块启用epoll与multi_accept。

要让 Nginx 真正撑住高并发,光改 nginx.conf 不够,得从系统层、内核层、Nginx 配置三层联动。单独调一个参数效果有限,关键在协同——比如你把 worker_connections 设到 65535,但系统文件描述符还是默认 1024,那根本起不来。
worker 进程与 CPU 绑定
这是并发能力的起点。进程数太少压不住流量,太多又引发频繁切换和锁竞争。
-
worker_processes auto;—— 推荐自动识别 CPU 核心数,比硬写数字更稳妥 -
worker_cpu_affinity auto;—— 自动将每个 worker 绑定到独立 CPU 核心,避免缓存失效和上下文抖动 - 若需手动指定(如 8 核),可用二进制掩码:
worker_cpu_affinity 00000001 00000010 ...,但 auto 已足够可靠
连接数与事件模型配置
这部分决定单机能同时处理多少 TCP 连接,是并发吞吐的直接瓶颈。
-
worker_rlimit_nofile 65535;—— 在nginx.conf顶层声明,告诉 Nginx “我允许你打开这么多文件” -
events { use epoll; worker_connections 10240; multi_accept on; }——epoll是 Linux 必选;multi_accept on让 worker 一次收多个新连接,减少唤醒次数 -
worker_connections值建议设为 8192–10240,而非盲目拉满到 65535:内存占用随连接数线性增长(每连接约 2–4 KB),需结合服务器内存反推
keepalive 与超时控制
长连接能省掉大量三次握手和 TIME_WAIT 开销,但留太久反而拖垮资源。
-
keepalive_timeout 65;—— 对 API 或动态服务,60–75 秒较平衡;CDN 或静态资源可设到 300 -
keepalive_requests 1000;—— 单个连接最多处理 1000 个请求,防连接长期空占 - 配套调内核:
net.ipv4.tcp_tw_reuse = 1和net.ipv4.ip_local_port_range = 1024 65000,缓解短连接端口耗尽问题
传输效率相关开关
这些不增加连接数,但能显著降低延迟、提升吞吐密度。
-
sendfile on;+tcp_nopush on;—— 启用零拷贝,文件传输绕过用户态,合并 TCP 包 -
tcp_nodelay on;—— 关闭 Nagle 算法,适合小包高频场景(如 WebSocket、实时接口) -
client_header_buffer_size 4k;和large_client_header_buffers 4 16k;—— 防大 Header 触发 400 错误,尤其带 JWT 或复杂 Cookie 的请求



















