Hello! On Mon, Feb 01, 2016 at 03:48:04PM +0600, Pavel V. wrote:
> Здравствуйте. > > Насколько сообществу интересна реализация улучшения модуля > ngx_http_limit_req_module, а в частности > расширения синтаксиса директивы limit_req? > > Предлагаемый синтаксис: > > (1) limit_req zone=название [burst=число] [nodelay] [if=условие] [last]; > (2) limit_req off if=условие; > (3) limit_req off; > (4) limit_req last if=условие; > > > Предлагаемая логика работы: > > Синтаксис (1): > > Базовый синтаксис дополняется возможностью указания условия if=условие и > параметром last. > Если заданное условие не выполняется, то ключ зоны не вычисляется, > директива пропускается, учет > запроса не происходит. Выполняются остальные директивы limit_req, при их > наличии. > Если заданное условие выполняется или условие не задано, применяются > ограничения зоны обычным > образом. При этом вычисляется ключ зоны, если значение ключа не пустое и > указан параметр last - > остальные директивы limit_req не выполняются. Сейчас условное применение limit_req делается с помощью ключа - если ключ пустой, то ограничение не применяется. Сделать явный отдельный параметр if - можно, но сколько-нибудь принципиальной разницы нет. В то же время не факт, что мы хотим тут усложнять синтаксис. Кроме того, см. ниже про "если хочется программировать". > Синтаксис (2): > > Возможность отключения ограничения по заданному в переменной условию. > Директива такого синтаксиса может быть только первой в списке директив > limit_req. Это выглядит очень неинтуитивно, IMHO. > Синтаксис (3): > > Возможность безусловного отключения ограничений, наследованных с > предыдущего уровня. > Все директивы, заданные на этом или предыдущем уровне - отключаются. Это уже записано в TODO, возможность отказаться от унаследованных ограничений, безусловно, нужна. > Синтаксис (4) > > Возможность прекратить обработку директив limit_req по заданному в > переменной условию, с > применением ограничений уже обработанных директив. > > Отличие от синтаксиса (2): может быть в любом месте в списке директив > limit_req, соответственно > директивы выше по списку директив должны быть обработаны корректно, в > остальном > является практически точной копией синтаксиса (2) ("синтаксический сахар"). > > Для данного улучшения уже почти готов патч (за вычетом синтаксиса 4). Также > можно сделать > аналогичную доработку модуля ngx_http_limit_conn_module. Эта логика предполагает последовательное применение ограничений. Меж тем, логика работы nginx'а предполагает декларативную конфигурацию, с отсутствием зависимости от порядка. Не надо тащить в nginx очередную императивную логику, хватит с нас rewrite-модуля. Если хочется программировать - стоит подумать о том, чтобы вытащить результаты ограничений в переменные, и дальше программировать с помощью директив rewrite-модуля же. > Из планируемых вещей также есть мысли по поводу добавления параметра > "dry-run". Да, сделать возможность проверки ограничений без их реального применения - тоже уже в TODO. [...] -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru