1、iP限流
1)编写Controller
@RestController
@Slf4j
publicclassController{
//nginx测试使用
@GetMapping(“/nginx”)
public String nginx(){
http://log.info(“Nginx success”);
}
}
2)修改host文件,添加一个网址域名
127.0.0.1 http://www.test.com
3)修改nginx,将步骤2中的域名,添加到路由规则当中
打开nginx的配置文件:
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s;
server{
server_name www.test.com;
location /access-limit/ {
proxy_pass http://127.0.0.1:8080/;
#基于ip地址的限制
#1)zone=iplimit 引用limit_rep_zone中的zone变量
#2)burst=2 设置一个大小为2的缓冲区域,当大量请求到来,请求数量超过限流频率时,将其放入缓冲区域
#3)nodelay 缓冲区满了以后,直接返回503异常
limit_req zone=iplimit burst=2 nodelay;
}
}
4)访问地址,测试是否限流
http://www.test.com/access-limit/nginx
2、多维度限流
1)修改nginx配置
#根据IP地址限制速度
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=10r/s;
#根据服务器级别做限流
limit_req_zone $server_name zone=serverlimit:10m rate=1r/s;
#根据ip地址的链接数量做限流
limit_conn_zone $binary_remote_addr zone=perip:20m;
#根据服务器的连接数做限流
limit_conn_zone $server_name zone=perserver:20m;
server{
server_name www.test.com;
location /access-limit/ {
proxy_pass http://127.0.0.1:8080/;
#基于ip地址的限制
limit_req zone=iplimit burst=2 nodelay;
#基于服务器级别做限流
limit_req zone=serverlimit burst=2 nodelay;
#基于ip地址的链接数量做限流 最多保持100个链接
limit_conn zone=perip 100;
#基于服务器的连接数做限流 最多保持100个链接
limit_conn zone=perserver 1;
#配置request的异常返回504(默认为503)
limit_req_status 504;
limit_conn_status 504;
}
location /download/ {
#前100m不限制速度
limit_rate_affer 100m;
#限制速度为256k
limit_rate 256k;
}
}