вызов map variable дважды
Здравствуйте, У меня используется переменная 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 хоть раз была вычислена, далее все остальные вызовы используют это значение, независимо от того, меняется ли переменная, по которой определяется значение? Есть ли возможность как-то заставить перевычислить это значение? Спасибо, Алексей Posted at Nginx Forum: http://forum.nginx.org/read.php?21,241868,241868#msg-241868 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
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@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: вызов map variable дважды
15.08.2013 11:18, lekrus пишет: Здравствуйте, У меня используется переменная 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 хоть раз была вычислена, далее все остальные вызовы используют это значение, независимо от того, меняется ли переменная, по которой определяется значение? Есть ли возможность как-то заставить перевычислить это значение? Я бы посоветовал пользовать две мапы вместо одной. Что содержимое у них будет одинаковое - так генератору конфига это без разницы. -- Best regards, Andrey Kopeyko and...@kopeyko.ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: релоад конфига
On 15.08.2013 13:09, Валентин Бартенев wrote: Что искать в дебаг логе? Я не вижу там никаких признаков получения сигнала, однако, например, посылание сигналов QUIT и TERM прекрасно работает. если включить отладочный лог - в нем видно получение сигналов и что nginx делает дальше, после получения сигнала: [notice] 2602#0: signal 1 (SIGHUP) received, reconfiguring [notice] 2602#0: signal 15 (SIGTERM) received, exiting [notice] 9580#0: signal 3 (SIGQUIT) received, shutting down Ради этих сообщений и не нужно включать отладочный лог. Достаточно уровня логгирования notice или info. ради этих - да. но у топикстартера были обоснованные подозрения, что nginx сигнал HUP получает, но потом почему-то правильным образом на него не реагирует. debug нужен для ...что nginx делает дальше, после получения сигнала -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: релоад конфига
А нет ли где в логах too many open files? 15 августа 2013 г., 3:30 пользователь Nick Knutov m...@knutov.com написал: ок, собрал то же, что было, с дебагом, нгинх заодним обновил до 1.5.3. Что искать в дебаг логе? Я не вижу там никаких признаков получения сигнала, однако, например, посылание сигналов QUIT и TERM прекрасно работает. 14.08.2013 17:58, Gena Makhomed пишет: On 14.08.2013 14:02, Nick Knutov wrote: [...] Проблема на первом сервере стабильно воспроизводится. причину проблем может помочь понять отладочный лог: http://nginx.org/ru/docs/debugging_log.html параметр --with-debug много оверхеда не добавляет, но очень удобен при поиске причин различных проблем. -- Best Regards, Nick Knutov http://knutov.com ICQ: 272873706 Voice: +7-904-84-23-130 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru -- Best Regards, Vadim Lazovskiy ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru