Nginx生产环境必须优化配置才能发挥性能:需设worker_processes auto和worker_connections 65535以匹配CPU核心数并提升并发上限,启用epoll和multi_accept on优化I/O,配合tcp_nodelay on、keepalive_timeout 65及SSL会话缓存等调优项,方能从默认万级QPS跃升至十万级。

默认配置的 Nginx 在生产环境几乎必然成为瓶颈——不是它不行,而是没“唤醒”。一台 8C16G 的服务器,用默认参数可能刚过 1 万 QPS 就 CPU 拉满、连接超时频发;而经过系统性配置优化,同一台机器稳定跑出 10 万+ QPS 完全可行。关键不在堆资源,而在逐层解开限制、对齐硬件能力、减少冗余开销。
worker 进程与连接模型调优
这是并发能力的底层基础。Nginx 是多进程单线程模型,worker 进程数和每个进程能处理的连接数共同决定理论并发上限。
- worker_processes auto; —— 让 Nginx 自动识别 CPU 核心数(如 8 核就启 8 个),比手动写死更适配 NUMA 架构,实测提升约 15%
- worker_cpu_affinity auto; —— 强制绑定进程到专属核心,避免跨核调度和缓存失效
- worker_connections 65535; —— 单进程最大连接数,需配合系统级 ulimit 调整(/etc/security/limits.conf 中设 * soft nofile 65535 和 * hard nofile 65535)
- use epoll; —— Linux 必选,支持高并发 I/O 多路复用;multi_accept on; 允许单次事件循环接受多个新连接,降低延迟
TCP 与 HTTP 层连接效率优化
大量短连接或小包交互会显著拖慢吞吐,这里重点压缩协议栈开销。
- tcp_nodelay on; —— 关闭 Nagle 算法,避免小包合并等待,对实时性敏感业务(如 API、WebSocket)效果明显
- tcp_nopush on; —— 配合 sendfile 使用,让内核在 TCP 缓冲区满或 FIN 时才发包,提升大文件传输效率
- keepalive_timeout 65; 和 keepalive_requests 10000; —— 延长长连接存活时间并提高复用次数,大幅减少 SSL 握手和 TCP 建连开销
- client_header_buffer_size 4k; 和 large_client_header_buffers 8 8k; —— 防止因 Header 过长触发 400 错误,同时避免过度分配内存
SSL/TLS 与缓冲区精细化控制
HTTPS 流量占比超 80% 的场景下,TLS 握手和加解密是 CPU 主要消耗点,缓冲区配置不当则易引发内存抖动或丢包。
- ssl_session_cache shared:SSL:10m; 和 ssl_session_timeout 4h; —— 启用共享会话缓存,复用 TLS session,减少 70%+ 握手 CPU 开销
- ssl_buffer_size 4k; —— 控制 TLS 记录层分片大小,平衡延迟与吞吐,避免大 buffer 导致首字节延迟升高
- client_body_buffer_size 128k; 和 client_max_body_size 20m; —— 匹配实际业务上传需求,避免频繁磁盘暂存(client_body_in_file_only off)
- proxy_buffering on; + 合理设置 proxy_buffers 和 proxy_busy_buffers_size —— 在反向代理场景下平滑后端响应节奏,防止上游抖动传导至客户端
系统与内核协同调优
Nginx 再优,也跑在操作系统之上。很多“Nginx 卡顿”实际是内核参数未跟上。
- net.core.somaxconn = 65535 —— 提升 listen 队列长度,避免高并发建连时丢 SYN
- net.ipv4.tcp_max_syn_backlog = 65535 —— 配合 somaxconn,应对 SYN Flood 类突发流量
- net.ipv4.tcp_tw_reuse = 1 —— 允许 TIME_WAIT 套接字重用于新连接(客户端为 NAT 场景时慎用)
- fs.file-max = 2097152 —— 提升系统级文件句柄上限,支撑百万级连接规划


















