nginx篇(一)之nginx做限流

限流算法一般有两种:

令牌桶算法:

思路:1、按照一定速率向令牌桶投送令牌。令牌桶满,则丢弃令牌 2、当请求过来时候,会经过一个过滤器,过滤器过滤的请求会经过令牌桶处理。3、请求只有拿到令牌才能被执行,拿不到令牌的请求被缓存 4、通过这种方式就能够控制请求的流量,令牌添加的速度就是请求流量的速度。

漏桶算法:

思路:请求先进入漏桶,漏桶以一定速率漏水,漏出的水会先处理,当水流远远大于漏桶漏水的速率,这个时候,水就会直接溢出。这里可以把请求当作水,这就是漏桶算法的大致思路。
nginx中主要通过漏桶算法来做限流

下面介绍下nginx中限流的主要方式:

//一、单位时间访问限流
//nginx.conf文件
//*http模块中添加:
//限制请求
limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=20r/s;
//说明:上述命令语法为:limit_req_zone  key  zone  rate
//1、key为定义限流对象,这里的key为$binary_remote_addr,意思是对客户端ip来进行限流
//2、zone:定义共享内存来存储访问信息,api_read:20m 表示大小为20m,名字为api_reda的共享内存区域
//1m可以存放16000的IP地址访问信息
//3、rate就是访问速率,表示每秒能够接收多少请求。20r/s就是每秒最多处理20个请求

//*location模块中添加
limit_req zone=api_read burst=25 nodelay;
//说明:
//1、zone=api_read共享内存信息
//2、burst=25 burst表示突发流量处理,如果流量突然增大超出rate=20r/s,超出的请求将被拒绝,无法处理突发流量。
//burst就是来解决这个问题的,表示超过设定的处理速率后能额外处理的请求数
//相当于缓存队列中加多了25个坑来存放这些多出的请求,如果请求还是多于这些坑,将被拒绝
//3、nodelay 立即执行 delay延迟执行 (并发超出的请求)```

### 二、限制并发连接数

```bash
//nginx.conf文件
//*http模块中添加:
//限制并发连接数量
limit_conn_zone $binary_remote_addr zone=perip_conn:10m;//根据ip来限制
limit_conn_zone $server_name zone=perserver_conn:100m;//根据server_name来限制

//*location模块中添加
//连接数限制,每个IP并发请求为2
limit_conn perip_conn 2;
//服务所限制的连接数(即限制了该server并发连接数量)
limit_conn perserver_conn 1000;```

以上就是我所了解的两种nginx限流的方式,如有错误,希望大佬指出
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值