淘先锋技术网

首页 1 2 3 4 5 6 7

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;

}

}