要让Nginx真正撑住高并发,必须协同优化内核TCP栈与Nginx配置:net.core.somaxconn需设为65535或更高(如262144),nginx listen backlog须与之对齐;keepalive_timeout建议60s、keepalive_requests设为10000以平衡复用与资源;同时调大tcp_max_syn_backlog、确保ulimit -n≥65535并配worker_rlimit_nofile,启用epoll和multi_accept。
要让 Nginx 真正撑住高并发,光调nginx.conf 不够,必须打通内核 TCP 栈——关键就在somaxconn、backlog和keepalive这三层的协同。
net.core.somaxconn 决定系统级连接队列上限这个参数控制内核为每个监听 socket 维护的“已完成连接”队列最大长度。默认值 128 在高并发下极易溢出,导致新连接被丢弃(SYN 收到但不回复 ACK),表现为客户端超时或 connection refused。
建议设为 65535 或更高,尤其在 16G+ 内存机器上可设为 262144
修改方式:
echo 65535 > /proc/sys/net/core/somaxconn,并写入/etc/sysctl.conf持久化注意:Nginx 的 listen backlog 值不能超过它,否则会被自动截断nginx listen backlog 参数要与 somaxconn 对齐Nginx 的listen 80 backlog=1024;中的 backlog 并非独立生效,它最终受限于内核的 somaxconn。若 somaxconn=128,哪怕你写 backlog=8192,实际队列仍只有 128。
Nginx在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。
下载
推荐显式配置,例如:
listen 80 backlog=65535;Kubernetes Ingress NGINX Controller 会自动读取 somaxconn 值作为默认 backlog,但仍建议手动确认其生效对于自建 Nginx,需同时改内核参数 + nginx 配置,缺一不可keepalive_timeout 与 keepalive_requests 要平衡复用与资源占用长连接能显著降低握手开销,但过长的 keepalive 会滞留大量空闲连接,挤占 worker_connections 资源。
keepalive_timeout 60;是主流选择:60 秒无新请求即关闭,兼顾复用率与连接释放速度keepalive_requests 10000;控制单连接最多处理请求数,防止单连接长期霸占资源若业务多为短平快接口(如 API),可适当缩短 timeout 至 15–30 秒;若含大文件下载,需结合 send_timeout 协同调整别漏掉配套参数:tcp_max_syn_backlog 和 ulimit somaxconn 只管“已完成连接”,而“待完成连接”(SYN 队列)由net.ipv4.tcp_max_syn_backlog控制,它同样需要调大(建议 ≥65535)。另外:确保ulimit -n≥ 65535,并通过worker_rlimit_nofile同步给 Nginx 进程worker_connections × worker_processes 应 ≤ ulimit -n,否则会出现 “too many open files” 错误使用use epoll;和multi_accept on;可进一步提升连接接纳效率
