Skip to content

Rate limit based on API Key tier #6

@murtuza-kolasavala

Description

@murtuza-kolasavala

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

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions