Nginx是大型架构核心,下面我详解Nginx 如何支撑50万并发@mikechen
一、架构与水平扩展
多层架构:前端使用多个 Nginx 实例做反向代理,后端采用多台应用服务器或微服务集群,避免单点瓶颈。

负载均衡与分流:通过 LVS、云负载均衡/或 DNS 轮询结合,Nginx upstream 分配流量。
弹性扩展:使用容器/虚拟机与自动扩缩容策略,应对突发流量。
二、操作系统与硬件准备
网络与 CPU:选择高吞吐网卡(万兆或以上)、多核 CPU,并启用中断绑定(IRQ affinity)。

内存与文件描述符:确保充足内存,提升文件描述符限制(ulimit -n)以支持大量连接。
内核参数:调整 TCP、网络栈和文件句柄相关内核参数(如 net.core.somaxconn、net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse 等)。
三、Nginx 关键配置参数
worker_processes 、与 worker_connections…等等。

1. worker_processes
决定能用多少 CPU 核心
worker_processes auto;
- 通常 = CPU 核心数
- 每个 worker 独立处理连接
2. worker_connections
单个 worker 能打开的最大连接数
events {
worker_connections 102400;
}
理论最大并发:
worker_processes × worker_connections;
示例:
- 8 核 CPU
- worker_connections = 100,000
最大并发 ≈ 8 × 100,000 = 800,000
3. use epoll
指定 I/O 多路复用模型:
events {
use epoll;
}
4. multi_accept
一次性 accept 更多连接:
events {
multi_accept on;
}
减少 accept 次数;
提升连接建立速度;
5. worker_rlimit_nofile
提升单进程文件描述符上限
worker_rlimit_nofile 200000;
四、配套技术与优化手段
TCP 调优:开启 tcp_tw_reuse、调小 tcp_fin_timeout、增大 net.ipv4.tcp_max_syn_backlog。

文件描述符与端口资源:调整 /proc/sys/fs/file-max,并扩展本地端口范围。
SSL/TLS 优化:使用硬件加速、会话复用(session cache/ tickets)、启用 OCSP stapling 减少握手成本。
缓存与静态分离:将静态内容托管在 CDN 或专用缓存层,减轻 Nginx 负载。
连接下沉与拒绝策略:对恶意或异常连接做限流、黑白名单、rate limiting(limit_conn、limit_req)保护服务稳定。