-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Hi, I am trying this module to work with API key based rate limiting. We want to implement rate limit on API key based on tier. Some API key required to have 50 RPS and Some required to have 100 RPS. Our implementation of rate limiting is below.
map $ms_apikey $ratelimit_tier10000 {
include /etc/nginx/ratelimit_tier10000.map;
default '';
}
map $ms_apikey $ratelimit_tier1000 {
include /etc/nginx/ratelimit_tier1000.map;
default '';
}
map $ms_apikey $ratelimit_tier500 {
include /etc/nginx/ratelimit_tier500.map;
default '';
}
map $ms_apikey $ratelimit_tier200 {
include /etc/nginx/ratelimit_tier200.map;
default '';
}
map $ms_apikey $ratelimit_tier100 {
include /etc/nginx/ratelimit_tier100.map;
default '';
}
map $ms_apikey $ratelimit_tier50 {
include /etc/nginx/ratelimit_tier50.map;
default '';
}
map $ratelimit_tier10000$ratelimit_tier1000$ratelimit_tier500$ratelimit_tier50$ratelimit_tier200$ratelimit_tier100 $ratelimit_default {
'' $ms_apikey;
default '';
}
Here we store API keys on file based on their tiers and map it in nginx.conf file. This mapping works well with default rate limiting module. Implementation on location block like below.
location /somepath {
rate_limit $ratelimit_default requests=5 period=1s burst=5;
rate_limit $ratelimit_tier50 requests=50 period=1s burst=50;
rate_limit $ratelimit_tier100 requests=100 period=1s burst=110;
rate_limit_pass redis;
proxy_pass http://www.example.com;
}
I have stored API key in /etc/nginx/ratelimit_tier50.map file so API key should have 50 RPS rate limit. While running load test with 150 RPS it isn't blocking nor i see any movement on redis. Please guide if i am doing something wrong in implementation.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request