Nginx高并发优化需worker_processes auto与worker_cpu_affinity auto协同绑定CPU核心,worker_connections和worker_rlimit_nofile同步设为65535并匹配ulimit与内核参数,辅以epoll、multi_accept及日志精简。

光靠默认配置撑不起高并发场景,Nginx 核心参数必须贴合硬件与业务节奏来调。关键不是堆数值,而是让 worker 进程、连接能力、系统资源三者对齐,避免一处卡死拖垮全局。
匹配 CPU 的进程数与亲和性
worker_processes 设为 auto 是最稳妥的起点,它会自动读取 CPU 核心数(比如 16 核就启 16 个 worker)。但仅设 auto 不够——还要绑定 CPU 核心,防止进程在不同核心间频繁迁移导致缓存失效。
- 在 main 块中写:worker_processes auto;
- 紧接加上:worker_cpu_affinity auto;(Nginx 1.12.2+ 支持)或手动指定,如 4 核可写 worker_cpu_affinity 0001 0010 0100 1000;
- 确认生效:用 ps -eo pid,psr,comm | grep nginx 查看各 worker 进程是否固定在对应 CPU 上
突破连接数天花板的三层联动
单个 worker 能处理多少连接,不是只改一个 worker_connections 就行。它受制于三个层级:Nginx 自身限制 → 系统文件描述符上限 → 内核网络队列深度。缺一不可。
- main 块中设:worker_rlimit_nofile 65535;(必须 ≥ worker_connections)
- events 块中设:worker_connections 65535;,并明确指定 use epoll;
- 系统级同步调整:ulimit -n 65535(写入 /etc/security/limits.conf),再调内核参数:net.core.somaxconn = 20480、fs.file-max = 1048576
精简事件模型与连接行为
events 块看似简单,却是并发吞吐的“前台调度中心”。几个开关开对了,能显著降低延迟抖动和连接堆积。
- multi_accept on;:让每个 worker 一次性接受多个已建立的连接,减少事件循环空转
- accept_mutex on;(默认):避免惊群效应;高负载下若出现连接不均,可试 accept_mutex_delay 50ms;
- keepalive_timeout 65; 和 keepalive_requests 100; 控制长连接生命周期,平衡复用率与资源释放速度
关闭冗余日志与隐藏标识
运维稳定性的“零瓶颈”,也体现在减少非必要开销。错误日志保留 warn 级别足够,访问日志在压测或高流量期可临时关闭;版本号暴露则增加被针对性攻击风险。
- main 块中:error_log /var/log/nginx/error.log warn;
- http 或 server 块中:access_log off;(静态资源服务或反向代理层常用)
- http 块顶部加:server_tokens off;,彻底隐藏 Nginx 版本标识











