Nginx是大型架构核心,下面我详解Nginx百万并发优化之道@mikechen
Nginx百万并发优化
Nginx 之所以适合高并发,核心在于其事件驱动、异步非阻塞的设计。
它并不为每个连接创建一个线程或进程,而是通过少量 worker 进程配合 epoll/kqueue 等事件机制,统一管理大量连接。

首先要关注的是 Nginx 自身的核心参数。
1. worker_processes
通常建议设置为与 CPU 核数相同,或使用 auto 让 Nginx 自动适配。这样可以充分利用多核能力,避免单进程成为瓶颈。
2. worker_connections
它决定单个 worker 可处理的最大连接数。
理论上总并发约等于 worker_processes × worker_connections,但实际会受到系统文件句柄限制和上游连接数影响。
百万并发场景下,这一参数通常需要配合系统级 ulimit 和 nofile 一起提升。
worker_processes auto;
worker_rlimit_nofile 1048576;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
Nginx内存参数优化
Nginx 的性能高度依赖 Linux 内核网络栈,因此系统参数优化是必不可少的一环。

1. 提升文件描述符限制
包括 ulimit -n、/etc/security/limits.conf 以及 systemd 配置中的 LimitNOFILE。百万并发几乎一定需要极高的 fd 上限。
2. 调整 TCP 相关参数
例如:
net.core.somaxconn:增大连接队列长度;net.ipv4.tcp_max_syn_backlog:提升半连接队列;net.ipv4.ip_local_port_range:扩大本地端口范围;net.ipv4.tcp_tw_reuse:合理回收 TIME_WAIT 连接;net.core.netdev_max_backlog:提高网络包排队能力。
# 文件描述符 fs.file-max = 10000000 fs.nr_open = 10000000 # 监听与 SYN 队列 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.core.netdev_max_backlog = 100000 # TIME_WAIT 复用(减少端口耗尽) net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.ip_local_port_range = 1024 65535
Nginx进一步优化方向
百万并发下的 Nginx 优化,本质上不是“调几个参数”这么简单,而是一项系统工程。

这里,还会涉及到:
|
方向
|
关键手段
|
效果
|
|---|---|---|
|
减少磁盘 IO
|
sendfile on + open_file_cache、DirectIO、SSD/NVMe
|
静态资源大幅提升
|
|
压缩与缓存
|
gzip / brotli、proxy_cache、fastcgi_cache
|
降低带宽与后端压力
|
|
上游连接
|
keepalive + zone 共享
|
减少后端建连
|
|
日志
|
降低级别、异步写入、或关闭 access_log
|
减少磁盘瓶颈
|
|
限流
|
limit_req / limit_conn
|
防雪崩
|
|
硬件
|
万兆/40G 网卡、多队列 RSS、足够内存
|
真正极限
|