ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: вызов map variable дважды



On Thu, Aug 15, 2013 at 03:18:43AM -0400, lekrus wrote:
> Здравствуйте,
> 
> У меня используется переменная
> map $v_host $backend {
>      default 1;
>      test  2;
>      test2 3;
> }
> 
> Далее идет 
> 
> location / {
>  set $v_host test;
> proxy_pass $backend #(тут переменная $backend правильно определяется, равна
> 2) 
> }
> 
> в процессе, upstream возвращает X-Accel-Redirect который вызывает другой 
> location /int {
> internal; 
> set $v_host test2;
> rewrite (.*) $backend
> }
> 
> и при таком вызове $backend остается равен 2, должен быть 3.
> 
> Я правильно понимаю, что в процессе одного вызова, если переменная map хоть
> раз была вычислена, далее все остальные вызовы используют это значение,
> независимо от того, меняется ли переменная, по которой определяется
> значение?

Правильно понимаете.  Определяться кстати она может не только
по одной переменной, а по произвольному выражению, содержащему
как строки, так и переменные.

> Есть ли возможность как-то заставить перевычислить это значение?

Можно, но только пропатчив nginx:

diff --git a/src/http/modules/ngx_http_map_module.c 
b/src/http/modules/ngx_http_map_module.c
--- a/src/http/modules/ngx_http_map_module.c
+++ b/src/http/modules/ngx_http_map_module.c
@@ -477,7 +477,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command
     }
 
     var->valid = 1;
-    var->no_cacheable = 0;
+    var->no_cacheable = 1;
     var->not_found = 0;
 
     vp = ngx_array_push(&ctx->values_hash[key]);

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.