核心是精准配置与系统联动:worker_processes设为auto或CPU物理核数,worker_connections配8192~65535并满足worker_rlimit_nofile≥乘积,启用worker_cpu_affinity auto绑定CPU核,关闭accept_mutex、开启multi_accept;keepalive_timeout设30~60秒,搭配keepalive_requests限请求数;调小缓冲区、限制上传、优化缓存策略,并同步调整系统文件句柄、somaxconn、tcp_tw_reuse等内核参数。

优化 Nginx 集群代理在高并发下的资源利用率,核心是让 CPU、内存、文件句柄、网络和磁盘 IO 各环节协同高效,避免单点瓶颈。不靠堆硬件,而靠精准配置与系统联动。
worker 进程与连接数合理配比
每个 worker 进程不是越多越好,也不是越少越省;关键要匹配 CPU 核心数与连接负载特征:
-
worker_processes 设为
auto或显式设为 CPU 物理核数(非超线程数),避免进程调度开销 -
worker_connections 建议设为 8192~65535,但需满足:
worker_rlimit_nofile ≥ worker_connections × worker_processes - 启用
worker_cpu_affinity auto,让每个 worker 绑定独立 CPU 核,减少缓存抖动 - 关闭
accept_mutex(accept_mutex off),配合multi_accept on,提升新连接接收效率
连接与请求生命周期精细化控制
长连接能复用资源,但放任不管反而拖垮内存和文件句柄:
- keepalive_timeout 设为 30~60 秒,过长易积压空闲连接;搭配 keepalive_requests(建议 1000~10000),限制单连接最大请求数,主动释放资源
- client_header_timeout / client_body_timeout 控制请求头/体读取超时,避免慢速攻击耗尽连接
- send_timeout 限制响应发送阶段阻塞时间,防后端延迟拖住整个连接
- 对非关键路径(如健康检查、静态资源)启用
proxy_buffering off减少内存缓冲占用
内存与缓存策略按需裁剪
缓存提升性能,但默认配置容易吃光内存:
-
proxy_cache_path 明确设置
keys_zone内存大小(如mycache:50m)和max_size磁盘上限(如5g),禁用无限制缓存 - 关闭不必要的缓存:对动态接口(含 Set-Cookie、Authorization 头)默认
proxy_cache_bypass $http_authorization和proxy_no_cache组合拦截 - 调小缓冲区:如
client_header_buffer_size 2k、large_client_header_buffers 4 4k,避免大 header 占用过多内存池 - 限制上传:通过
client_max_body_size 50m防止大文件请求耗尽内存
系统级协同调优不可跳过
Nginx 配置再好,系统限制没打开,照样卡在“Too many open files”或连接队列溢出:
- 修改
/etc/security/limits.conf:为 nginx 用户设nofile软硬限制(如65535) - 内核参数调整:
net.core.somaxconn=65535、net.ipv4.tcp_tw_reuse=1、fs.file-max=2000000 - 启用 BBR 拥塞控制(
net.ipv4.tcp_congestion_control = bbr),提升高丢包/高延迟链路下的吞吐 - 日志写入降载:非调试环境关闭 access_log,或用
buffer=64k flush=5s异步刷盘


















