Nginx 限流机制:请求速率与连接数限制深度解析(一)
一、背景与意义
在高并发场景下,Nginx 作为流量入口,需对请求进行精细化控制以保障服务稳定性。请求速率限制(QPS 限流) 与 连接数限制(并发连接限流) 是 Nginx 提供的核心限流能力,分别通过 ngx_http_limit_req_module
和 ngx_http_limit_conn_module
实现,有效应对流量突发、恶意攻击等场景。
二、请求速率限制(Limit Request Rate)
1. 工作原理:漏桶算法(Leaky Bucket)
- 漏桶模型:请求进入桶中,桶以固定速率(
rate
)“漏水”(处理请求)。若桶满(突发流量超过burst
容量),多余请求被丢弃(或延迟处理,取决于nodelay
配置)。 - 适用场景:控制单位时间内的请求数量(如 API 接口 QPS 限制),防止服务因高频请求过载。
2. 核心指令
-
limit_req_zone
(定义限流规则):limit_req_zone $binary_remote_addr zone=test:10m rate=10r/s;
$binary_remote_addr
:按客户端 IP 限流(二进制表示,节省内存)。zone=test:10m
:创建名为test
的共享内存区(10MB,存储限流状态)。rate=10r/s
:允许每秒 10 个请求(漏桶处理速率)。
-
limit_req
(应用限流规则):