-
服务端 guava rate-limit限流
-
基于Nginx 限流
- 根据IP地址限制速度
- 第一个参数 $binary_remote_addr
binary 目的是缩小内存占用 ,remote_addr表示通过IP地址来限流 - 第二个参数zone=iplimit:20m
iplimit是一块内存区域(记录访问频率信息),20m是这快内存区域的大小 - 第三个参数是发行的速率: 1r/s 一个request每秒, 5r/m 五个request每分钟
基于IP限流:
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s;
基于服务器级别:
limit_req_zone $server_name zone=serverlimit:20m rate=100r/s;基于连接数
limit_conn_zone $binary_remote_addr zone=perip:20m;
limit_conn_zone $server_name zone=perserver:20m;
server {
.....
#基于IP:
limit_req zone=iplimit burst=2 nodelay;
#第一个参数 zone=iplimit =》 引用的是上面定义的zone变量
#第二个参数burst=2 设置一个大小为2的缓冲区域, 当大量请求到来,
#超过限流频率了, 将其放入缓冲区域
#第三个参数nodelay: 缓冲区满了以后, 直接返回503异常#基于服务器: 通常来说服务器的限制是最大的
limit_req zone=serverlimit burst=100 nodelay;#基于连接数-服务器:
limit_req zone=perserver burst=100;#基于连接数-ip:
limit_req zone=perip burst=100;#限流返回码 。默认是503
limit_req_status 504
}
下载限速例子
location /download/ {
#刚开始不限速, 用于引流, 超过100m的时候限制速度
limit_rate_after 100m;
limit_rate 256k;
}