限流中间件IpRateLimitMiddleware的使用
前言
IpRateLimitMiddleware(Github: AspNetCoreRateLimit) 是ASPNETCore的一个限流的中间件,用于控制客户端调用API的频次, 如果客户端频繁访问服务器,可以限制它的频率,已降低访问服务器端的压力。或者如果有爬虫在爬取关键数据,也可以限制某个/某些API或者某些IP的每天调取次数, 这样限制他爬取的速度。
当然, 其实我要解决的是另外一个问题。我们写的WebApi有时候会存在一些API,我们只希望其它内部应用来调用,比如,WebApi的HealthCheck, 我们就希望只有我们的中台可以定时调用来获取信息, 而前端是不能调用。这个我们就可以把内部的IP地址放到IpWhitelist配置项中, 并且限制特定的API调用次数为0次, 这样只有白名单里面的地址可以访问对应的端点, 如下所示。
使用
NuGet安装:Install-Package AspNetCoreRateLimit
Startup 配置
public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){//添加IP限流//services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);//services.AddOptions();//services.AddMemoryCache();//services.Configure<IpRateLimitOptions>(App.Configuration.GetSection("IpRateLimit"));//services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();//services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();//services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();//services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();//services.AddHttpContextAccessor();}
Configure 调用中间件UseIpRateLimiting
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//启用限流//app.UseIpRateLimiting();}
appsettings.json
配置
"IpRateLimit": {"EnableEndpointRateLimiting": true,"StackBlockedRequests": false,"RealIPHeader": "X-Real-IP","ClientIdHeader": "X-ClientId","HttpStatusCode": 429,"GeneralRules": [{"Endpoint": "*:/file/multipart/upload","Period": "1s","Limit": 20},{"Endpoint": "*","Period": "1s","Limit": 2},{"Endpoint": "*","Period": "15m","Limit": 300},{"Endpoint": "*","Period": "12h","Limit": 3000},{"Endpoint": "*","Period": "7d","Limit": 50000}]}
配置说明
如果EnableEndpointRateLimiting设置为false则全局将应用限制,并且仅应用具有作为端点的规则*。例如,如果您设置每秒5次调用的限制,则对任何端点的任何HTTP调用都将计入该限制。
如果EnableEndpointRateLimiting设置为true,则限制将应用于每个端点,如{HTTP_Verb}{PATH}。例如,如果您为*:/api/values客户端设置每秒5个呼叫的限制,则可以GET /api/values每秒呼叫5次,但也可以呼叫5次PUT /api/values。
如果StackBlockedRequests设置为false,拒绝的API调用不会添加到调用次数计数器上。比如:如果客户端每秒发出3个请求并且您设置了每秒一个调用的限制,则每分钟或每天计数器等其他限制将仅记录第一个调用,即成功的API调用。如果您希望被拒绝的API调用计入其他时间的显示(分钟,小时等),则必须设置StackBlockedRequests为true。
在RealIpHeader使用时,你的Kestrel 服务器背后是一个反向代理,如果你的代理服务器使用不同的页眉然后提取客户端IP X-Real-IP使用此选项来设置它。
将ClientIdHeader被用于提取白名单的客户端ID。如果此标头中存在客户端ID并且与ClientWhitelist中指定的值匹配,则不应用速率限制。
测试
限流中间件IpRateLimitMiddleware的使用相关推荐
- 源代码探案系列之 .NET Core 限流中间件 AspNetCoreRateLimit
在 上一篇 文章中,博主带领大家一起深入了解 ConcurrencyLimiter 这个中间件,正当我得意洋洋地向 Catcher Wong 大佬吹嘘这一点小收获时,大佬一脸嫌弃地说,一个单机版的方案 ...
- Laravel 限流中间件 throttle 简析
在Laravel 中配置 在 app\Http\Kernel.php 中,默认添加到中间件组 api 下,1分钟60次. 2. 限流原理 获取唯一请求来源,进行唯一标识(key) 获取该请求请求次数 ...
- 不得不了解系列之限流
点击关注公众号,Java干货及时送达 来源:https://my.oschina.net/qiangmzsx/blog/4277685 限流简介 现在说到高可用系统,都会说到高可用的保护手段:缓存.降 ...
- 后端服务不得不了解之限流
点击上方 好好学java ,选择 星标 公众号 重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客 ...
- .NET6之MiniAPI(二十一):限流
限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量的范围,会引起服务连续崩塌, ...
- 如何在 Asp.Net Core 中对请求进行限流
译文链接:https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html 在应 ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...
- 关于服务限流的一些思考
限流的价值感 限流必然是很有价值的,在系统资源不足时面对外部世界的不确定性(突发流量,超预期的用户)而形成的一种自我保护机制. 但是价值感是很低的,因为99.99%的时候系统总是工作在安全线之下,甚至 ...
- 十分钟搞懂Java限流及常见方案
点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 文章目录 限流基本概念 QPS和连接数控制 传输速率 黑白名单 分布式环境 限流 ...
最新文章
- pytorch实现手写数字识别_Paddle和Pytorch实现MNIST手写数字集识别对比
- 有这么一群人,他们通过AI撬动世界!
- TCP/IP——基本知识
- java 二分法 应用_介绍一下java中的二分法运用
- 树莓派:VNC远程控制
- AMIO编辑器开发(三):转向C++,月底遇到第二个瓶颈
- 【uoj#209】[UER #6]票数统计 组合数+乱搞
- 风险案例-24期-缺少严格的变更及版本控制流程,导致问题反复,调试工作量和时间增加...
- centos 5.6 x86 安装 文泉驿字体
- spark机器学习 源码解析及原理分析
- linux触摸屏校准命令,FL2440下触摸屏校准
- RT_thread 临界区保护
- Microsoft Remote Procedure Call Runtime 远程代码执行漏洞(CVE-2022-26809)
- Hutool Java 工具类库Excel导出,配置宽度自适应极度舒适
- 不小心删了(或覆盖了)window系统变量的PATH的怎么办?
- geoserver之gs-kml、gs-wcs、gs-rest、gs-gwc、gs-sec-jdbc
- 幽默笑话,隔壁的长舌妇,木子家原创
- 神经网络中前向传播和反向传播解析
- 判断手机为Android还是ios
- CSK6开发分享1-视觉开发套件初体验篇
热门文章
- 第六章 三大消息摘要算法总结
- WinRAR在DOS下压缩/解压缩的使用方法
- SQLServer、Mysql、Oracle 创建、删除用户和授予用户权限
- 【NOIP必备攻略】 基本noilinux使用方法
- 自己封装一个弹框插件
- [Javascript] Avoid Creating floats if they are not needed
- CSS/DIV网页设计视频教程目录【转】
- 大学生计算机课程考试试题,大学生计算机基础课程考试系统研究与实现
- linux 脚本 写更新,用Shell写的游戏客户端更新脚本
- java publickey_数字证书中读取PublicKey