Добрый вечер!
Есть сервер, который представляет из себя просто пачку статических файлов,
лежащих на диске и отдаваемых nginx’ом, эдакое http-зеркало.
Можно ли средствами nginx ограничить скачивающих, например скачал 10 файлов
— отдыхай 15 минут. Смысл в том, чтобы защититься от скачивания всех файлов
подряд ботами за короткий промежуток времени.
https://sysoev.ru/nginx/docs/http/ngx_http_limit_req_module.html
http {
# в среднем 1 запрос в минуту
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
server {
…
location /files/ {
limit_req zone=one burst=10 nodelay;
…
}
}
}
> Кстати, а можно ли исключить некоторые айпи из ограничения?
>
>
>
У меня примерно так. Задаем список неограниченных IP и определяем req_zones:
geo $slow {
default 1;
include /etc/nginx/conf.d/whitelist;
}
limit_req_zone $binary_remote_addr zone=fast:1m rate=1000r/s;
limit_req_zone $binary_remote_addr zone=slow:10m rate=20r/m;
А потом собственно обработка. Тех, кто в slow, отправляем в location @slow:
recursive_error_pages on;
error_page 555 = @slow;
if ($slow = 1) {
return 555;
}
limit_req zone=fast burst=10000 nodelay;
и продолжаем нормальную отдачу
@slow выглядит так:
location @slow {
limit_req zone=slow burst=5 nodelay;
error_page 503 /503.html;
и т.д.
А whitelist задается так:
X.X.X.X 0;
Y.Y.Y.Y 0;
Просмотров: 1007