- 🍀 nginx流量限制的工作原理
- 🍀 nginx限流的基本配置
- 🍀 处理突发情况
- 🍀 无延迟排队
🍃流量限制
(rate-limiting)是nginx
最有用的功能之一,却经常被错误理解和错误配置。它允许我们限制用户在给定时间内可以发出的HTTP请求数量。例如请求网站首页的GET请求,表单登录的POST请求等。
🍃速率限制可以出于安全目的使用。例如,可以降低暴力破解账号密码的攻击速度。通过将传入请求速率限制为实际用户的典型值,并(通过记录)标识目标URL,它可以帮助我们防御DDOS攻击。而更为通用的用法是,防止上游应用程序服务器同时被太多用户请求所淹没。
1. nginx流量限制的工作原理
🍂 流量限制(rate-limiting)
使用的是漏斗算法leaky bucket algorithm
,该算法在带宽受限的情况下广泛用于电信和分组交换计算机网络中,以处理突发性问题。类比是用一个水桶,在水桶的顶部浇水,然后从底部漏水。如果倒水的速度超过漏水的速度,则水桶会溢出。在请求处理方面,水代表来自客户端的请求,存储桶代表队列,根据先进先出(FIFO)调度算法,请求等待处理。漏水表示离开缓冲区以供服务器处理的请求,溢出表示已丢弃且从未得到服务的请求。
2. nginx限流的基本配置
🍂 限流主要依靠2个指令来配置limit_req_zone
和limit_req
,配置如下范例👇
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
-
⚡limit_req_zone指令定义了限流的具体配置,limit_req在上下文中启用上述配置(此范例中,针对
/login/
的请求都将受到mylimit配置的影响) -
⚡
limit_req_zone
指令,它通常定义在http
区块中,在多个server
上下文中都可以使用,其包含3个参数&#x