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@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru