在高并发系统架构中,Nginx 常作为第一层流量入口。
因此,想要让 Nginx 稳定支撑百万级并发请求,核心在于对连接模型、内核参数、缓存优化@mikechen
Nginx并发配置
Nginx 最大连接数 ≈ worker_processes × worker_connections。

例如 16 核 CPU,配置:
worker_processes auto;
events {
use epoll;
worker_connections 100000; # 每 worker 10 万
multi_accept on;
}
理论上就是:16 × 100000 = 160 万连接。
再考虑一点系统开销,百万级并发是“连接数量”层面可达的。
但你必须确保:内核允许这么多 fd(文件描述符)。
内存够:每连接几十 KB~数百 KB,100 万连接就是几 GB 级别。
Nginx全局 优化
在高并发场景下,Linux 内核默认的限制往往是瓶颈所在。

我们需要调整网络连接的回收速度和文件句柄限制。
文件句柄数:这是基础,并发多少,句柄就要准备多少。
端口回收:加快 TIME_WAIT 状态连接的回收。
队列长度:增大半连接和全连接队列,防止瞬间流量冲垮系统。
# 核心优化建议 net.ipv4.tcp_tw_reuse = 1 # 允许将TIME-WAIT sockets重新用于新的TCP连接 net.ipv4.ip_local_port_range = 1024 65535 # 扩大临时端口范围 net.core.somaxconn = 65535 # 增大全连接队列 net.core.netdev_max_backlog = 65535 # 增大网卡积压队列 fs.file-max = 2097152 # 系统级文件句柄限制
缓存与静态化——把压力挡在前面
要“轻松”到百万并发,通常必须用缓存/静态资源,把 CPU 密集逻辑挡在后面。

静态资源:直接由 Nginx 用 sendfile + 内核 page cache 输出。
动态内容:前面加 Nginx 缓存,后端只处理 MISS。
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:1g
max_size=20g inactive=1h use_temp_path=off;
server {
location /api/ {
proxy_pass http://backend;
proxy_cache STATIC;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating;
add_header X-Cache $upstream_cache_status;
}
location /static/ {
root /data/www; # 静态文件目录
expires 30d;
}
}
HTTP / 反向代理层面关键配置
尽量让连接“轻”,减少每连接的工作量和内存占用。

keepalive_timeout 60; # 根据业务调;长连接越多,连接数越高 keepalive_requests 10000; # 每个连接可复用的请求数量 client_body_timeout 10; client_header_timeout 10; send_timeout 10; client_max_body_size 10m; # 缓冲与队列(视内存调整) client_body_buffer_size 64k; client_header_buffer_size 4k; large_client_header_buffers 4 16k; # 日志可以适当精简,避免 IO 压力 access_log /var/log/nginx/access.log main buffer=64k flush=1s;
}