高并发之API接口,分布式,防刷限流,如何做?
作者:互联网
o world !";
}
}
配置文件:
/*springmvc的配置文件中加入自定义拦截器*/
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.pptv.activityapi.controller.pointsmall.AccessLimitInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
访问效果如下,10s 内访问接口超过 4 次以上就过滤请求,原理和计数器算法类似:
接入层限流
主要介绍 nginx 限流,采用漏桶算法。
限制原理: 可一句话概括为:“根据客户端特征,限制其访问频率”,客户端特征主要指 IP、UserAgent 等。使用 IP 比 UserAgent 更可靠,因为 IP 无法造假,UserAgent 可随意伪造。
用 limit_req 模块来限制基于 IP 请求的访问频率:
http://nginx.org/en/docs/http/ngxhttplimitreqmodule.html
也可以用 tengine 中的增强版:
http://tengine.taobao.org/documentcn/httplimitreqcn.html
1、并发数和连接数控制的配置:
nginx http配置:
#请求数量控制,每秒20个
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
#并发限制30个
limit_conn_zone $binary_remote_addr zone=addr:10m;
server块配置
limit_req zone=one burst=5;
limit_conn addr 30;
2、ngxhttplimitconnmodule 可以用来限制单个 IP 的连接数:
ngxhttplimitconnmodule 模块可以按照定义的键限定每个键值的连接数。可以设定单一 IP 来源的连接数。
分享一套SpringBoot开发博客系统源码,以及完整开发文档!速度保存!
并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
标签:防刷,http,addr,zone,IP,连接数,API,limit,限流 来源: https://blog.csdn.net/yelvgou9995/article/details/106737259