Поддерживает ли nginx HttpLimitReqModule поддержку в час/день/неделю?

Я ищу решение для ограничения скорости для http api, для nginx уже существует модуль HttpLimitReqModule, поддерживающий эту функцию. Но обратитесь к документу, этот модуль поддерживает только каждую секунду и за минуту. Любое решение за час/день?

Ответ 1

Я не знаю о функции внутри nginx, которая бы это сделала. Однако вы можете использовать модуль auth_request для передачи всего входящего трафика в веб-службу восходящего потока, которая проверила трафик и применила правила ограничения скорости.

location / {
    auth_request /ratelimiter;

    ..
    Normal configuration settings
}

location /ratelimiter {
    proxy_pass http://internalratelimitinghost;
    # return a HTTP 200 to allow the request
    # return anything else to deny it
}

nginx auth_request. Модуль по умолчанию не включен, поэтому вам нужно его скомпилировать.

Ответ 2

В какой-то момент мне понадобилась та же функция, чтобы определить пределы скорости на час, день, неделю и т.д.

Мне не ngx_http_limit_req_module сначала создать клон ngx_http_limit_req_module, но потом просто интегрировал необходимые изменения в nginx-mod.

Так что это работает с nginx-модом:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/h; # 1 request per hour
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/d; # 1 request per day
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/w; # 1 request per week
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/M; # 1 request per month
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/Y; # 1 request per year