Торможение ботов через limit_req
Михаил Монашёв
postmaster at softsearch.ru
Sun Jan 13 00:55:16 UTC 2013
Здравствуйте.
Захотелось тут ограничить количество запросов, приходящих от ботов.
Написал вот так:
map $http_user_agent $rpm {
default 999999;
~bot 1;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=$rpm r/s;
Но оказалось: invalid number of arguments in "limit_req_zone" directive
Ошибку осознал. Переписал вот так:
map $http_user_agent $ua_zone {
default notbot;
~bot bot;
}
limit_req_zone $http_user_agent zone=bot:10m rate=1r/s;
limit_req_zone $http_user_agent zone=notbot:10m rate=999999r/s;
limit_req zone=$ua_zone burst=120;
Выдало:unknown limit_req_zone "$ua_zone"
Пришлось пока применить старый, но не совсем мне подходящий способ:
if ($http_user_agent ~ "bot"){
set $limit_rate 1000;
}
Подскажите пожалуйста, как ограничить количество запросов через
limit_req для юзерагентов, для которых матчится регэксп?
--
С уважением,
Михаил mailto:postmaster at softsearch.ru
Подробная информация о списке рассылки nginx-ru