Как ограничить количество запросов к сайту с одного IP за один час?
Суть проблемы: сайт парсят через сеть прокси (около 200 IP). Нужно ограничить такие запросы, при этом не блокируя роботы поисковиков.
Сейчас запросы ограничиваются Nginxом через limit_req_zone + fail2ban. Но это все плохо работает, т. к. получается ограничение на несколько запросов в секунду. Я хочу настроить ограничение в течение часа, скажем с одного IP разрешается выполнить только 1800 запросов в час. Как это сделать?
В переводе на русский, мы готовы принять все 1800 (burst) запросов зараз, первые 50 (delay) обработаем сразу, все остальные будут висеть в очереди и отправлятся на обработку раз в 2 секунды.
burst и delay можно выбрать по вкусу.
Мне кажется, что реально burst надо подобрать минимальный необходимый для поисковиков, а delay выставлять в зависимости от возможностей вашего бекенда.
Судя по описанию, rate=1r/h актуально только для 1 запроса в час. Точно как и в Nginxe без модов rate=30r/m работает не как 30 запросов в пределах минуты, а лишь разрешает 1 запрос в 2 секунды.
Some NGINX users seek to define rate-limiting of once in a day for specific resources. This is not possible with stock NGINX.
Our patch allows for a more fine-grained rate limit configuration.