プレゼンテーション:プレゼンテーション
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.コード **
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に設定されている場合、制限はのように、各エンドポイントに適用されます。たとえば、*/api/valクライアントに1秒当たり5回の呼び出しに制限をした、GET /api/valは1秒当たり5回呼び出しますが、/api/valも5回呼び出します。
StackBlockedRequestsがfalseに設定されている場合、拒否されたコールはスロットルカウンタに追加されません。クライアントが1秒間に3リクエストを発行し、1秒間に1通話の制限を設定した場合、1分または1日あたりのカウンタなどの他の制限は、ブロックされていない最初の通話のみを記録します。拒否されたリクエストを他の制限にカウントする場合は、StackBlockedRequestsをtrueに設定する必要があります。
RealIpHeaderKestrelサーバーがリバースプロキシの背後にある場合にクライアントIPを抽出するために使用されます。プロキシが別のヘッダーを使用している場合、X-Real-IPはこのオプションを使用して設定されます。
ClientIdHeaderホワイトリストを抽出するために使用するクライアントID 。クライアントIDがこのヘッダに存在し、ClientWhitelistで指定された値と一致する場合、レート制限は適用されません。
ここではクライアントIPベースのレート制限のみを記述しています。このプロジェクトに興味がある場合は、AspNetCoreRateLimitのウェブサイトを参照してください。
最后に皆は私の文章を好きになって、まだ迷惑をかけて注意を払う、希望 net生态圏がますます良くなる!