Nginx并发请求排队数由listen指令的backlog参数控制,非events或http块配置;需同步调高系统net.core.somaxconn至65535,并在server块listen中显式设backlog=65535。

Nginx 主配置文件中不直接控制“并发请求排队数”,真正影响连接排队能力的是 listen 指令中的 backlog 参数,它决定内核 listen 队列(即已完成三次握手、等待 Nginx accept 的连接)的最大长度。
这个值不是在 events 或 http 块里配的,而是在 server 块的 listen 行中显式指定。例如:
server {
listen 80 backlog=65535;
# 其他配置...
}如果没写 backlog=,Nginx 会使用系统默认值:
- Linux 等多数平台默认为 511
- FreeBSD/DragonFly/macOS 默认为
-1(由内核自动决定)
⚠️ 注意:即使你把 worker_connections 设得很高,若 backlog 还是 511,高并发瞬间涌来的 SYN 已完成连接仍会被内核丢弃(表现为 connection refused 或超时),根本到不了 Nginx worker 进程。
对于 Nginx Ingress Controller(如 TKE 中部署的),情况不同:
- 它会自动读取系统
net.core.somaxconn值,并写入生成的nginx.conf作为backlog; - TKE 默认
somaxconn=4096,但建议调至65535,命令如下:
sysctl -w net.core.somaxconn=65535 # 永久生效需写入 /etc/sysctl.conf
所以,要改“最大并发请求排队数”,分两步:
-
修改系统级上限:
-
net.core.somaxconn = 65535(必须先设好,尤其对 Ingress) - 同时确保
fs.file-max和ulimit -n足够(建议 ≥1048576)
-
-
显式设置 listen backlog(仅原生 Nginx,非 Ingress):
- 在
server { listen ... }中加上backlog=65535 - 多端口监听需每个
listen单独加
- 在
不复杂但容易忽略


















