连接数限流ngx_http_limit_conn_module和漏桶算法ngx_http_limit_req_module

连接数限流模块ngx_http_limit_conn_module和漏桶算法实现的请求限流模块ngx_http_limit_req_module

limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s;

表示当相同的ip地址并且访问相同的uri,会导致进入limit req的限制(每秒1个请求)

limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”

limit_req_conn 用来限制同一时间连接数,即并发限制

limit_req_conn模块可以根据源IP限制单用户并发访问的连接数或连接到该服务的总并发连接数

limit_req_zone $binary_remote_addr zone=req10k:30m rate=10000r/s;

当区的大小为1m的时候,大约可以记录32000个会话信息(一个会话占用 32 bytes)。

$binary_remote_addr”其表示IP地址,也可以使用如$server_name作为KEY来限制域名级别的最大连接数;

limit_conn_status:配置被限流后返回的状态码,默认返回503;

limit_conn_log_level:配置记录被限流后的日志级别,默认error级别

server{

limit_conn one 1 ,限制客户端并发连接数量为1, allow only one connection per an IP address at a time

}

lit_req_zone的功能是通过漏桶原理来限制用户的连接频率,(这个模块允许你去限制单个地址指定会话或特殊需要的请求数 )

而 limit_zone 功能是限制一个客户端的并发连接数。(这个模块可以限制单个地址的指定会话或者特殊情况的并发连接数)

按照域名限制并发连接数配置示例,接着在要限流的location中添加限流逻辑配合limit_conn使用(控制每个域名最大并发请求连接数):

limit_conn_zone $ server_name zone=perserver:10m;

如果配置了桶容量(burst>0)且延迟模式(没有配置nodelay);如果桶满了,则新进入的请求被限流;如果没有满则请求会以固定平均速率被处理(按照固定速率并根据需要延迟处理请求,延迟使用休眠实现);

如果配置了桶容量(burst>0)且非延迟模式(配置了nodelay)不会按照固定速率处理请求,而是允许突发处理请求;如果桶满了,则请求被限流,直接返回相应的错误码;

 

cc 攻击超过策略Qps上报日志到syslog server,离线脚本统计上报日志,保存数据库。

将qps字段+domain+当前时间作为key,会基于时间在redis产生大量的节点,时间维度分散不利于统计,且redis节点expire时间如果设置的比较小,统计不当造成遗漏。

所以统计QPS采取平均手段,根据根据domain生成redis节点,记录3分钟内cc攻击QPS。

 

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值