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