AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。
介绍
AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速率。AspNetCoreRateLimit 包包含一个 IpRateLimitMiddleware 和一个 ClientRateLimitMiddleware,对于每个中间件,您可以为不同的场景设置多个限制,例如允许 IP 或客户端在每秒、15 分钟等时间间隔内进行最大调用次数。您可以定义这些限制来解决对 API 发出的所有请求,或者您可以将限制范围限定为每个 API URL 或 HTTP 动词和路径。
地址
https://github.com/stefanprodan/AspNetCoreRateLimit
功能
基于客户端 IP 的速率限制
设置和配置
定义速率限制规则
行为
运行时更新速率限制
基于客户端 ID 的速率限制
设置和配置
定义速率限制规则
行为
运行时更新速率限制
高级配置
自定义配额超出响应
IP / ClientId 解析贡献者
使用 Redis 作为分布式计数器存储
使用(基于客户端 IP 的速率限制)
NuGet 安装:
Install-Package AspNetCoreRateLimit
Install-Package AspNetCoreRateLimit.Redis
Startup.cs代码:
public void ConfigureServices(IServiceCollection services)
{services.AddOptions();services.AddMemoryCache();services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));services.AddInMemoryRateLimiting();services.AddMvc();services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
}public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{app.UseIpRateLimiting();app.UseMvc();
}
appsettings.json:
"IpRateLimiting": {"EnableEndpointRateLimiting": false,"StackBlockedRequests": false,"RealIpHeader": "X-Real-IP","ClientIdHeader": "X-ClientId","HttpStatusCode": 429,"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],"EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],"GeneralRules": [{"Endpoint": "*","Period": "1s","Limit": 2},{"Endpoint": "*","Period": "15m","Limit": 100},{"Endpoint": "*","Period": "12h","Limit": 1000},{"Endpoint": "*","Period": "7d","Limit": 10000}]}
如果EnableEndpointRateLimiting
设置为false,
则限制将在全局范围内应用,并且仅适用于端点的规则*
。例如,如果您设置每秒 5 次调用的限制,则对任何端点的任何 HTTP 调用都将计入该限制。
如果EnableEndpointRateLimiting
设置为true
,则限制将适用于每个端点,如{HTTP_Verb}{PATH}
。例如,如果您为*:/api/values
客户端设置每秒调用 5 次的限制,则每秒可以调用GET /api/values
5 次,但也可以调用 5 次PUT /api/values
。
如果StackBlockedRequests
设置为false
,则拒绝的呼叫不会添加到节流计数器。如果客户端每秒发出 3 个请求,并且您设置了每秒一个呼叫的限制,则其他限制(例如每分钟或每天计数器)将仅记录第一个呼叫,即未被阻止的呼叫。如果您希望被拒绝的请求计入其他限制,您必须设置StackBlockedRequests
为true
.
用于在您的RealIpHeader
Kestrel 服务器位于反向代理之后时提取客户端 IP,如果您的代理使用不同的标头,则X-Real-IP
使用此选项进行设置。
ClientIdHeader
用于提取白名单的客户端 ID 。如果此标头中存在客户端 ID 并且与 ClientWhitelist 中指定的值匹配,则不应用速率限制。
这里只写了基于客户端 IP 的速率限制,如果对此项目感兴趣,更多文档请前往AspNetCoreRateLimit官网。
最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!
AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。相关推荐
- 给 asp.net core 写个中间件来记录接口耗时
给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...
- ASP.NET Core 中的中间件
前言 由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...
- 如何在 ASP.NET Core 中 自定义中间件
ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...
- 理解ASP.NET Core中的中间件
中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...
- asp.net core 自定义异常处理中间件
Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...
- ASP.NET Core URL Rewrite中间件
URL重写是基于一个或多个预置规则修改请求URL的行为.URL重写在资源位置和访问地址之间创建了一种抽象,这样二者之间就减少了紧密的联系.URL重写有多种适用的场景: 临时或永久移动或替换服务器资源, ...
- ASP.NET Core -中间件(Middleware)使用
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- ASP.NET Core 中间件(Middleware)详解
ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...
- ASP.NET Core中HTTP管道和中间件的二三事
本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:中间件是什么?在.NET Core中的工作原理又是怎样的呢? 配置ASP.NET Core请求(Request)处理管道 ...
最新文章
- 充电电池和充电时间说明
- 机器学习(一)——线性回归、分类与逻辑回归
- 网络资源(1) - Hadoop视频
- 中国联通4G携号转网业务支撑的架构实践
- JAVA接口继承、抽象类等
- GMM-HMM语音识别原理详解 - 全文
- 管理感情:精力有限,要么干活,要么内斗
- linux 环境变量_linux的环境变量
- Spring Boot 静态资源处理
- myeclipse10破解找不到common文件夹的问题
- linux asm 裸设备,为ASM生成裸设备
- 用matlab判断两个球是否相交,判断两个矩阵相交
- 2016天津成考计算机试题,2016年天津事业单位考试《职业能力测验》(部分)试题及答案解析...
- js控制浏览器窗口弹出、警告框、确认框
- 机房服务器安装操作系统
- WPS/WORD设置每一页显示50行代码或者是固定数量的行数
- 集群环境下,谁偷走quartz配置的定时任务
- linux 网口对应网卡_Intel 700系列 电口万兆网卡 X710T2L评测
- 怎么用键盘快捷键将光标定位到浏览器地址栏
- 火神山秒建5G基站,“云监工”背后的是通信技术的极限挑战