🐛 Fix rate limiter

This commit is contained in:
2025-10-08 18:01:25 +08:00
parent 630a532d98
commit 1315c7f4d4

View File

@@ -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" };