Задать вопрос

Возможно ли реализовать лимит на количество запросов в секунду по GET параметрам запроса?

Задача, чтобы на все url вида api.php/api_key=#API_KEY#&method=phone&service=#SERVICE#&country=#COUNTRY# был лимит на количество запросов на адрес по IP. То есть , если пользователь с ip 199.0.0.0 запрашивает api.php/api_key=123&method=phone&service=5&country=6 , то ему нужно ждать секунду, чтобы запросить снова этот url с данными параметрами, а все запросы которые он делает в периоде этой секунды улетали в 429 ошибку. Возможно ли реализовать данный алгоритм средствами nginx? Что нужно поменять в конфиге?
map "$arg_api_key:$arg_method:$arg_service:$arg_country" $limit_first {
                default "";
                "~*^:phone:~*^:~*^" $binary_remote_addr;
        }

        map "$arg_activation:$arg_method" $limit_sec {
                default "";
                "~*^:cancel" $binary_remote_addr;
                "~*^:sms" $binary_remote_addr;
        }

        limit_req_zone $limit_first zone=req_first:10m rate=1r/s;
        limit_req_zone $limit_sec zone=req_sec:10m rate=1r/s;
  • Вопрос задан
  • 228 просмотров
Подписаться 3 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
нельзя
нужна считалка
как минимум fail2ban или аналог, и лучше бы аналог быстрый ( на хабре есть для Раста шик)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы