Re: Торможение ботов через limit_req
Валентин Бартенев
vbart at nginx.com
Sun Jan 13 15:09:59 UTC 2013
On Sunday 13 January 2013 13:02:26 Михаил Монашёв wrote:
> Здравствуйте, Валентин.
>
> >> Подскажите пожалуйста, как ограничить количество запросов через
> >> 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;
>
> А можно сюда как-то приделать, чтобы ограничение работало для запросов
> от ботов, которые проксируются?
>
Указать limit_req в location с proxy_pass.
Но надо учитывать, что proxy-модуль работает уже после, поэтому если запрос
будет отдан из кэша, то об этом становится известно уже только после того,
как отработал limit_req.
[...]
>
> limit_req, как я понял, работает так: все запросы ниже скорости
> rate=1r/s обслуживаются нормально, от rate=1r/s, но не более burst=120
> в очереди, тормозятся. А если очередь превышается, то выдаётся 503. Я
> правильно понял?
Приблизительно. Точное описание алгоритма есть на википедии:
http://en.wikipedia.org/wiki/Leaky_bucket
--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru