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