nginx配置limit_req限制ip访问速率详解
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,欢迎扫码加入Java高知×××流1、漏桶原理漏桶原理是什么呢?我们可以从字面上简单的理解,就是有一个桶,它的体积是固定的,桶底下有一个小洞会不停的漏水出去,而桶的上方有个水龙头,也不停的往桶里灌水。假
千家信息网最后更新 2025年01月23日nginx配置limit_req限制ip访问速率详解
欢迎扫码加入Java高知×××流
1、漏桶原理
漏桶原理是什么呢?我们可以从字面上简单的理解,就是有一个桶,它的体积是固定的,桶底下有一个小洞会不停的漏水出去,而桶的上方有个水龙头,也不停的往桶里灌水。
假设我们这个桶的体积是1L,小洞的口能漏水的最大速率为100ml/s,对以下情况进行实验:
(1)进水的速率是50ml/s,这时候对于小洞来说完全无压力,那么这个桶里的水就不会溢出,所有的水都会从小洞里漏出来。
(2)接着我们把水龙头出水的速率调大到100ml/s,这个时候,和小洞漏水的速率一样,这个时候桶里的水也不会溢出,桶中的水不会有变化,所有的水都会从小洞里漏出来。
(3)我们再把水龙头调大,调到150m/m,这个时候,进水的速率比出水的速率每秒大50ml,经过20秒后,桶里的水满了,会溢出来,之后每秒都会有50ml的水会溢出。
以上的不管哪种情况,相同的一点是,漏水的最大速率是一样的。当进水的速率大于漏水的速率,桶满水之后,将有一部分水会被溢出。
换成我们访问一台服务器也一样,限制其流量的存储量和速率,当处理不过来的时候会直接废弃掉一些请求,确保服务器的正常流量处理。
这就是漏桶原理。
2、Nginx漏桶原理配置
Nginx采用漏桶原理(leaky bucket),对请求的ip进行过于频繁的限制,参考文档链接:https://en.wikipedia.org/wiki/Leaky_bucket
具体的配置如下:
#以用户二进制IP地址,定义三个漏桶,滴落速率1-3req/sec,桶空间1m,1M能保持大约16000个(IP)状态limit_req_zone $binary_remote_addr zone=qps1:1m rate=1r/s;limit_req_zone $binary_remote_addr zone=qps2:1m rate=2r/s;limit_req_zone $binary_remote_addr zone=qps3:1m rate=3r/s; server { #速率qps=1,峰值burst=5,延迟请求#严格按照漏桶速率qps=1处理每秒请求#在峰值burst=5以内的并发请求,会被挂起,延迟处理#超出请求数限制则直接返回503#客户端只要控制并发在峰值[burst]内,就不会触发limit_req_error_log# 例1:发起一个并发请求=6,拒绝1个,处理1个,进入延迟队列4个:#time request refuse sucess delay#00:01 6 1 1 4#00:02 0 0 1 3#00:03 0 0 1 2#00:04 0 0 1 1#00:05 0 0 1 0location /delay { limit_req zone=qps1 burst=5;} #速率qps=1,峰值burst=5,不延迟请求#加了nodelay之后,漏桶控制一段时长内的平均qps = 漏桶速率,允许瞬时的峰值qps > 漏桶qps#所以峰值时的最高qps=(brust+qps-1)=5#请求不会被delay,要么处理,要么直接返回503#客户端需要控制qps每秒请求数,才不会触发limit_req_error_log# 例2:每隔5秒发起一次达到峰值的并发请求,由于时间段内平均qps=1 所以仍然符合漏桶速率:#time request refuse sucess#00:01 5 0 5#00:05 5 0 5#00:10 5 0 5# 例3:连续每秒发起并发请求=5,由于时间段内平均qps>>1,超出的请求被拒绝:#time request refuse sucess#00:01 5 0 5#00:02 5 4 1#00:03 5 4 1 location /nodelay { limit_req zone=qps1 burst=5 nodelay;} }
欢迎扫码加入Java高知×××流
速率
峰值
处理
原理
时候
小洞
延迟
限制
水龙
水龙头
控制
配置
最大
从小
体积
客户
客户端
就是
情况
时间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
常德软件开发高职
戴尔服务器的电源冗余策略
新冠肺炎新增数据库
重庆软件开发哪家正规
服务器显示客户端模组不完整
如何设置数据库同步到主界面
电子商务系统数据库设计
adas软件开发环境
网络技术有限公司电话多少
网络安全悬镜
诊疗软件开发数据科学服务
spring数据库怎么连接
服务器管理器如何关掉iis
sql 修改数据库
数据库2012连接失败
兖矿休闲网络安全工程师
张家港知名服务器优质推荐
网络安全事例2020
主键是数据库自动生成
互联网时代最重要的十大科技
mvc读取数据库
湖南天天向上 网络技术
福建信息软件开发商家
还原linux服务器系统命令
心电图编码数据库
网络安全四十一条规定
化州手机软件开发
软件开发设计认证
数据库导入数据的功能
海子网络安全吗