🐛 Fix rate limiter
This commit is contained in:
@@ -26,11 +26,25 @@ builder.Services.AddRateLimiter(options =>
|
|||||||
{
|
{
|
||||||
options.AddFixedWindowLimiter("fixed", limiterOptions =>
|
options.AddFixedWindowLimiter("fixed", limiterOptions =>
|
||||||
{
|
{
|
||||||
limiterOptions.PermitLimit = 120;
|
var ip = context.Connection.RemoteIpAddress?.ToString() ?? "unknown";
|
||||||
limiterOptions.Window = TimeSpan.FromMinutes(1);
|
|
||||||
limiterOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
|
return RateLimitPartition.GetFixedWindowLimiter(
|
||||||
limiterOptions.QueueLimit = 0;
|
partitionKey: ip,
|
||||||
|
factory: _ => new FixedWindowRateLimiterOptions
|
||||||
|
{
|
||||||
|
PermitLimit = 120, // 120 requests...
|
||||||
|
Window = TimeSpan.FromMinutes(1), // ...per minute per IP
|
||||||
|
QueueProcessingOrder = QueueProcessingOrder.OldestFirst,
|
||||||
|
QueueLimit = 10 // allow short bursts instead of instant 503s
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
options.OnRejected = async (context, token) =>
|
||||||
|
{
|
||||||
|
context.HttpContext.Response.StatusCode = StatusCodes.Status429TooManyRequests;
|
||||||
|
await context.HttpContext.Response.WriteAsync(
|
||||||
|
"Rate limit exceeded. Try again later.", token);
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
var serviceNames = new[] { "ring", "pass", "drive", "sphere", "develop" };
|
var serviceNames = new[] { "ring", "pass", "drive", "sphere", "develop" };
|
||||||
|
Reference in New Issue
Block a user