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