Используя ограничение скорости 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 в минуту.
Я прочитал ссылку на документ, но мало что видел в стеке разных правил скорости.
Это возможно? Если да, то каков будет синтаксис?
Совершенно верно применить несколько зон к одному блоку. Вы также можете создать несколько зон, в которых хранятся запросы одного и того же ключа (обычно некоторый префикс 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;
}
При этом, если ваш веб-сервер не может обработать короткую серию поисковых запросов, возможно, вам придется переложить свою поисковую систему на другую машину или применить другой вид ограничения скорости. Вам нужен значительный запас между обычным использованием человеком и использованием, превышающим возможности ваших машин. поддерживать. В противном случае вы можете не найти безопасного значения между раздражающими законными пользователями и неспособностью ограничить злоупотребление / использование ботов.