Торможение ботов через 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