Re: Торможение ботов через limit_req
Валентин Бартенев
vbart at nginx.com
Sun Jan 13 01:04:47 UTC 2013
On Sunday 13 January 2013 04:55:16 Михаил Монашёв wrote:
> Здравствуйте.
>
> Захотелось тут ограничить количество запросов, приходящих от ботов.
> Написал вот так:
>
> 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 для юзерагентов, для которых матчится регэксп?
map $http_user_agent $bot_ua {
~bot bot;
}
limit_req_zone $bot_ua zone=bot:10m rate=1r/s;
limit_req zone=bot burst=120;
--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru