Re: map и limit req
Ruslan Ermilov
ru at nginx.com
Wed Mar 20 19:08:20 UTC 2013
On Wed, Mar 20, 2013 at 02:46:20PM -0400, sergey_s wrote:
> Здравствуйте
> Друзья, растолкуйте пожалуйста такой кусок конфига, найден тут, в рассылке
>
> 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;
>
> я понимаю как работает map, но хоть убей не понимаю как она связана тут с
> limit_req_zone ( дока тоже мне как-то свет не проливает на это )
> что в $http_user_agent на начальном этапе понятно, в $bot_ua - пустая
> строка
> далее, при нахождении в $http_user_agent подстроки bot, $bot_ua,
> присваивается значение bot
> правильно ?
> а далее, меня сбивает с толку
>
> limit_req_zone $bot_ua... ..
Переменная $bot_ua, значение которой (bot или пустая строка) зависит
от запроса, и является ключом в зоне "bot". Пустые значения (см. доку)
в зоне не учитываются, другими словами, ограничиваться будут только
боты.
> предположим нужная подстрока найдена, тогда переменная $bot_ua = bot
> в итоге получается:
>
> limit_req_zone bot zone=bot:10m rate=1r/s;
> limit_req zone=bot burst=120;
>
> правильно ?
> тогда как это вообще работает ?
>
> расскажите если не трудно
Смысл в том, что там по синтаксису переменная, а они в nginx зависят
от запроса.
> и вопрос связанный со всем этим
> нужно резать канал конкретным юзерагентам из определенного списка, ( либо
> через инклуд списка, либо просто перечисленыым в директиве map )
Не услышал тут вопроса. Пример с User-Agent есть в документации к
модулю map: http://nginx.org/ru/docs/http/ngx_http_map_module.html
В зависимости от того, что нужно конкретно, значениям User-Agent из
нужного списка в map могут соответствовать либо одно и то же непустое
значение (например, "1", как выше для ботов), либо разные (если их
ограничивать нужно по отдельности). Переменная задаёт ключ, по которому
ведётся учёт и производится ограничение. Запросы с одинаковым значением
ключа учитываются вместе. Я советую ещё раз вдумчиво прочитать
документацию на map и limit_{req,conn} на http://nginx.org.
Подробная информация о списке рассылки nginx-ru