• 文章
  • 在线工具

Nginx高迸发访问限流处理方式

Nginx限流 nginx高并发访问
9440

应用场景:

一般情况下,并发量是比较大的数据接口,并且不经常变动的数据,需要做多级缓存,另外没有做缓存的数据接口,用户不断刷新,访问频率过快,有恶意的大量请求爬取数据,会对系统造成影响。而限流就是保护措施之一。

  • 限流(迸发访问次数)
  • 限制单个ip访问次数 (恶意攻击爬取)
  • 队列均速放行(缓冲队列)
1.Nginx限流

说明: 使用nginx的 ngx_http_limit_req_module模块进行限制的,使用limit_req和limit_req_zone命令来设置;

1)http模块下添加:

#1.每秒允许10次访问,10M的缓存空间
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;
#2.根据某个ip来限制,存储空间大小为1m
#limit_req_zone $binary_remote_addr zone=addr:1m


$binary_remote_addr:根据请求IP地址进行限流

key:定义限流对象, binary_remote_addr,是基于 remote_addr(客户端IP) 来做限流,binary_ 开头的目的是压缩内存占用量

zone: 定义共享内存区来存储访问信息, ip_limit:10m表示一个大小为10M,名字为ip_limit的内存区域。1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息

rate: 用于设置最大访问速率,rate=10r/s 表示每秒最多处理10个请求。Nginx 实际上以毫秒为粒度来跟踪请求信息,因此 10r/s 实际上是限制:每100毫秒处理两个请求。这意味着,自上一个请求处理完后,若后续100毫秒内又有请求到达,将拒绝处理该请求。

2)location模块下添加

limit_req zone=ip_limit burst=15 nodelay;#对应上面的1

limit_conn addr 5; #对应上面的2


说明:

zone=ip_limit对应上面的限流对象地址;

bursrt=15表示最大支持15的并发,会有5个请求存在队列中,不会被拒绝;如果不加,则会被拒绝

nodelay: 表示并发超出的5个请求,不会被延迟,会被立即执行,如需等待执行的话,配置delay即可。


评论
或者使用社交账号快捷登录