AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。
介紹
AspNetCoreRateLimit 是一種 ASP.NET Core 速率限制解決方案,旨在控制客戶端可以根據(jù) IP 地址或客戶端 ID 向 Web API 或 MVC 應(yīng)用程序發(fā)出請求的速率。AspNetCoreRateLimit 包包含一個 IpRateLimitMiddleware 和一個 ClientRateLimitMiddleware,對于每個中間件,您可以為不同的場景設(shè)置多個限制,例如允許 IP 或客戶端在每秒、15 分鐘等時間間隔內(nèi)進行最大調(diào)用次數(shù)。您可以定義這些限制來解決對 API 發(fā)出的所有請求,或者您可以將限制范圍限定為每個 API URL 或 HTTP 動詞和路徑。
地址
https://github.com/stefanprodan/AspNetCoreRateLimit
功能
基于客戶端 IP 的速率限制
設(shè)置和配置
定義速率限制規(guī)則
行為
運行時更新速率限制
基于客戶端 ID 的速率限制
設(shè)置和配置
定義速率限制規(guī)則
行為
運行時更新速率限制
高級配置
自定義配額超出響應(yīng)
IP / ClientId 解析貢獻(xiàn)者
使用 Redis 作為分布式計數(shù)器存儲
使用(基于客戶端 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設(shè)置為false,則限制將在全局范圍內(nèi)應(yīng)用,并且僅適用于端點的規(guī)則*。例如,如果您設(shè)置每秒 5 次調(diào)用的限制,則對任何端點的任何 HTTP 調(diào)用都將計入該限制。
如果EnableEndpointRateLimiting設(shè)置為true,則限制將適用于每個端點,如{HTTP_Verb}{PATH}。例如,如果您為*:/api/values客戶端設(shè)置每秒調(diào)用 5 次的限制,則每秒可以調(diào)用GET /api/values5 次,但也可以調(diào)用 5 次PUT /api/values。
如果StackBlockedRequests設(shè)置為false,則拒絕的呼叫不會添加到節(jié)流計數(shù)器。如果客戶端每秒發(fā)出 3 個請求,并且您設(shè)置了每秒一個呼叫的限制,則其他限制(例如每分鐘或每天計數(shù)器)將僅記錄第一個呼叫,即未被阻止的呼叫。如果您希望被拒絕的請求計入其他限制,您必須設(shè)置StackBlockedRequests為true.
用于在您的RealIpHeaderKestrel 服務(wù)器位于反向代理之后時提取客戶端 IP,如果您的代理使用不同的標(biāo)頭,則X-Real-IP使用此選項進行設(shè)置。
ClientIdHeader用于提取白名單的客戶端 ID?。如果此標(biāo)頭中存在客戶端 ID 并且與 ClientWhitelist 中指定的值匹配,則不應(yīng)用速率限制。
這里只寫了基于客戶端 IP 的速率限制,如果對此項目感興趣,更多文檔請前往AspNetCoreRateLimit官網(wǎng)。
最后大家如果喜歡我的文章,還麻煩給個關(guān)注, 希望net生態(tài)圈越來越好!
總結(jié)
以上是生活随笔為你收集整理的AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 实现音频播放动画控件
- 下一篇: .NET6中关于Minimal API的