diff --git a/pkg/middlewares/ratelimiter/rate_limiter.go b/pkg/middlewares/ratelimiter/rate_limiter.go index 5798fd87a..043974d47 100755 --- a/pkg/middlewares/ratelimiter/rate_limiter.go +++ b/pkg/middlewares/ratelimiter/rate_limiter.go @@ -146,7 +146,12 @@ func (rl *rateLimiter) ServeHTTP(rw http.ResponseWriter, req *http.Request) { logger.Info().Msgf("ignoring token bucket amount > 1: %d", amount) } - delay, err := rl.limiter.Allow(ctx, source) + // Each rate limiter has its own source space, + // ensuring independence between rate limiters, + // i.e., rate limit rules are only applied based on traffic + // where the rate limiter is active. + rlSource := fmt.Sprintf("%s:%s", rl.name, source) + delay, err := rl.limiter.Allow(ctx, rlSource) if err != nil { rl.logger.Error().Err(err).Msg("Could not insert/update bucket") observability.SetStatusErrorf(ctx, "Could not insert/update bucket")