基于Nginx的限流

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值