Re: location vs map по скорость
Ruslan Ermilov
ru на nginx.com
Чт Июл 26 20:42:44 UTC 2018
On Thu, Jul 26, 2018 at 04:50:45PM +0300, Maxim Dounin wrote:
> On Thu, Jul 26, 2018 at 03:43:39PM +0300, kpoxa wrote:
>
> > Добрый день.
> >
> > А что будет по скорости быстрее работать, при ограничении доступа к
> > определенным расширениям файлов (2-3 десятка расширений):
> >
> > location ~* \.(ext1|ext2|ext3)$ {
> > deny all;
> > }
> > location / {
> > //access granted
> > }
> >
> > или
> >
> > map $uri $error {
> > ~".ext1$" 403;
> > ~".ext2$" 403;
> > ~".ext3$" 403;
> > }
> > location / {
> > if ($error = 403) {
> > return 403;
> > }
> > }
>
> Вот конкретно из этих двух примеров - быстрее будет работать
> совершенно точно первый, потому что во втором случае будет
> выполняться три разных регулярных выражения, а не одно, как в
> первом случае. В общем случае, когда используемые регулярные
> выражения одинаковы и в том и в другом варианте, наверное тоже
> location чуть выиграет за счёт отсутствия лишних операций с
> переменными и инструкций rewrite-модуля.
>
> Впрочем, я сильно сомневаюсь, что разница будет хоть как-то
> измерима по сравнению с собственно обработкой запроса даже в этом
> случае, не говоря уже про общий. Так что выбирать стоит скорее
> исходя из удобства поддержки всего этого хозяйства.
Возможно есть смысл добавить переменную?
# HG changeset patch
# User Ruslan Ermilov <ru на nginx.com>
# Date 1532637590 -10800
# Thu Jul 26 23:39:50 2018 +0300
# Node ID 430d80baa550a753a26b1a06d8213ca0e0030176
# Parent f7e79596baf209151682f2f7d220161c034657ac
Added $exten.
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -226,6 +226,10 @@ static ngx_http_variable_t ngx_http_cor
offsetof(ngx_http_request_t, uri),
NGX_HTTP_VAR_NOCACHEABLE, 0 },
+ { ngx_string("exten"), NULL, ngx_http_variable_request,
+ offsetof(ngx_http_request_t, exten),
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
+
{ ngx_string("request"), NULL, ngx_http_variable_request_line, 0, 0, 0 },
{ ngx_string("document_root"), NULL,
Подробная информация о списке рассылки nginx-ru