一、worker_processes —— CPU 利用率的上限
要实现性能的“10倍跨越”,核心逻辑是充分利用多核 CPU 资源、优化连接复用以及打破操作系统的限制。
Nginx 是单线程异步非阻塞模型,要跑满硬件性能,必须让 Nginx 的工作进程与 CPU 核心一一对应。

worker_processes: 建议设置为 auto。
worker_processes auto; worker_cpu_affinity auto; # 自动绑定 CPU 亲和性
这会让 Nginx ,自动检测 CPU 核心数并启动对应数量的工作进程。
二、worker_connections —— 并发连接能力的核心
单机千万级 QPS 的第一个瓶颈往往是文件句柄数。
在 Linux 中,每个连接都是一个文件。
worker_rlimit_nofile: 必须调大工作进程能打开的最大文件数(建议 65535 或更高)。
worker_connections: 单个工作进程能处理的最大连接数。
公式: 最大并发连接数 = worker_processes * worker_connections。

worker_rlimit_nofile 65535; # 突破系统默认的 1024 限制
events {
worker_connections 10240; # 单个进程支持万级连接
use epoll; # Linux 下必选的高效 I/O 复用模型
multi_accept on; # 允许一次性接受多个新连接
}
三、减少握手开销: keepalive_timeout
在高并发场景下,频繁建立和关闭 TCP 连接(三次握手、四次挥手)会消耗大量 CPU 并导致 TIME_WAIT 连接堆积。
keepalive_timeout: 保持长连接的超时时间(如 60s)。
keepalive_requests: 这是提升性能的隐藏大招。
默认通常只有 100,意味着一个长连接处理 100 个请求后就会关闭。
在高并发场景下,应将其调大到 1000 甚至 10000。

http {
keepalive_timeout 65;
keepalive_requests 10000; # 增加单个长连接能处理的请求数
}
四、零拷贝与网络传输优化:sendfile
sendfile on: 开启“零拷贝”技术。
数据不需要经过内核态与用户态的反复拷贝,直接由内核读取磁盘并发送给网卡,极大地降低了 CPU 负载。

tcp_nopush on: 告诉 Nginx 在一个数据包里发送所有头文件,而不是一个接一个发送,提高网络效率。
tcp_nodelay on: 禁用 Nagle 算法,确保小数据包能实时发送,减少响应延迟。