Welcome! Log In Create A New Profile

Advanced

Улучшение ngx_http_limit_req_module

Pavel V.
February 01, 2016 04:50AM
Здравствуйте.

Насколько сообществу интересна реализация улучшения модуля 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 не выполняются.

Синтаксис (2):

Возможность отключения ограничения по заданному в переменной условию.
Директива такого синтаксиса может быть только первой в списке директив limit_req.

Синтаксис (3):

Возможность безусловного отключения ограничений, наследованных с предыдущего уровня.
Все директивы, заданные на этом или предыдущем уровне - отключаются.

Синтаксис (4)

Возможность прекратить обработку директив limit_req по заданному в переменной условию, с
применением ограничений уже обработанных директив.

Отличие от синтаксиса (2): может быть в любом месте в списке директив limit_req, соответственно
директивы выше по списку директив должны быть обработаны корректно, в остальном
является практически точной копией синтаксиса (2) ("синтаксический сахар").

Для данного улучшения уже почти готов патч (за вычетом синтаксиса 4). Также можно сделать
аналогичную доработку модуля ngx_http_limit_conn_module.

Из планируемых вещей также есть мысли по поводу добавления параметра "dry-run".

Предлагаю обсудить целесообразность/заинтересованность сообщества в подобного рода доработках.


Пример использования предлагаемого синтаксиса:

server {

...

limit_req_zone $binary_remote_addr zone=user:10m rate=200r/s;
limit_req_zone $binary_remote_addr zone=spider:10m rate=20r/s;

location / {
limit_req off if=$verytrusted; #last applied too
limit_req zone=api burst=2 if=$is_api_host last;
limit_req zone=spider burst=20 if=$is_spider_host$is_spider_re last nodelay;
limit_req zone=user;
}

location /static {
limit_req off;
}
...
};


--
С уважением,
Pavel mailto:pavel2000@ngs.ru

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Улучшение ngx_http_limit_req_module

Pavel V. February 01, 2016 04:50AM

Re: Улучшение ngx_http_limit_req_module

Maxim Dounin February 01, 2016 08:26AM

Re: Улучшение ngx_http_limit_req_module

Pavel V. February 01, 2016 12:04PM

Re: Улучшение ngx_http_limit_req_module

Maxim Dounin February 01, 2016 01:18PM

Re: Улучшение ngx_http_limit_req_module

Pavel V. February 01, 2016 06:46PM

Re: Улучшение ngx_http_limit_req_module

Валентин Бартенев February 02, 2016 06:26AM

Re: Улучшение ngx_http_limit_req_module

Pavel V. February 02, 2016 08:24AM

Re: Улучшение ngx_http_limit_req_module

Валентин Бартенев February 02, 2016 09:00AM

Re: Улучшение ngx_http_limit_req_module

Pavel V. February 02, 2016 11:10AM

Re: Улучшение ngx_http_limit_req_module

Валентин Бартенев February 02, 2016 11:50AM

Re: Улучшение ngx_http_limit_req_module

Pavel V. February 02, 2016 01:32PM

Re: Улучшение ngx_http_limit_req_module

Валентин Бартенев February 02, 2016 02:06PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 316
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready