Ограничение скорости Nginx с использованием нескольких правил скорости

Ограничение скорости Nginx с использованием нескольких правил скорости

Использование ограничения скорости nginx на примере этого правила:

limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;

Это установит 30 запросов в минуту. Однако что, если я хочу добавить второе правило, так что логика будет "30 запросов в минуту или 1 запрос в секунду. Что наступит раньше"

Причина этого в том, что мы все еще хотим ограничиться 30/мин, но есть некоторые странные попытки, которые мы видим спам в 10x запросов в течение 1-2 секунд. Это вызывает некоторые проблемы, когда запросы приходят так быстро.Поэтому мы хотели бы ограничить количество запросов пользователей до 1 в секунду и до 30 в минуту.

Я прочитал ссылку на документ, но не увидел ничего особенного в отношении суммирования различных правил ставок.

Возможно ли это? Если да, то какой будет синтаксис?

решение1

Вполне допустимо применять несколько зон к одному и тому же блоку.Вы также можете создать несколько зон, в которых будут храниться запросы на один и тот же ключ (обычнонекоторый префикс IP-адреса клиента). Это требует минимальных затрат на обработку и память.

Следующее ограничит пользователей, идентифицированных по их сетевому адресу, как в секундных, так и в минутных интервалах, и позволит им временно превышать установленный лимит на короткие промежутки времени.всплески. Вы хотите разрешить это, так как это сделает ваш сайт менее неработоспособным для пользователей с ненадежными устройствами ввода и/или сетевым доступом — они могут отправить один и тот же запрос дважды:

map $remote_addr $request_limiting_zone_key {
    # [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;

 # [..]

location /search {
    limit_req zone=request_limit_search_second burst=3;
    limit_req zone=request_limit_search_minute burst=3;
}

Тем не менее, если ваш веб-сервер не может справиться с коротким всплеском поисковых запросов, возможно, вам придется перенести нагрузку на поисковую систему на другую машину или применить другой тип ограничения скорости.Вам необходим значительный запас между типичным использованием человеком и использованием, которое превышает возможности вашей машины.чтобы не отставать. В противном случае вы можете не найти безопасного соотношения между раздражением законных пользователей и неспособностью ограничить злоупотребление/использование ботов.

Связанный контент