Re: limit_req_zone на конкретный url

Валентин Бартенев vbart at nginx.com
Mon Dec 30 00:05:19 UTC 2013


On Monday 30 December 2013 03:25:11 denis wrote:
> Приветствую.
> 
> Есть необходимость ограничить обращения к конкретному урлу, причём не
> учитывая аргументов. То есть что-то вроде
> limit_req_zone $server_name$uri zone=one:10m 5r/m;
> 
> location = /lalala {
> ...
> limit_req zone=one nodelay;
> }
> 
> при этом все ссылки вида /lalala?aaa=bbb также должны обработаться.
> Корректна ли конструкция $server_name$uri ? И как описывать путь до "?"
> 

Некорректна, поскольку директива limit_req_zone может принимать только одну 
переменную.  Читайте документацию: http://nginx.org/r/limit_req_zone/ru

Правильно будет разнести все хосты по отдельным блокам server и на каждый 
выделить свою зону с $uri.

В крайнем случае можно воспользоваться директивой set:

  set $limit $server_name$uri;

http://nginx.org/r/set/ru


> И попутно такой вопрос: точно ли r/m работает корректно?

Точно.


> Есть подозрение, что оно работает неправильно...
> прописана зона с описанием
> limit_req_zone $server_name zone=one:10m 5r/m;
> location тот же. Должны первые 5 запросов пропустить, остальные в
> течении минуты - срезать.

Не должны.

Встречный вопрос: если в городе ограничение скорости 60 км/ч, то должны
ли вы проехать минимум 60 километров прежде чем может быть зафиксировано 
превышение скорости?

В вашей конфигурации, чтобы запрос был отклонен, достаточно послать его
с интервалом менее 12 секунд от предыдущего успешного.

--
Валентин Бартенев


Подробная информация о списке рассылки nginx-ru