Мне нужно установить для переменной значение по умолчанию, если оно еще не установлено. Следующая конфигурация выполняет свою работу:
if ($foo ~ "^$") {
set $foo default-value;
}
Но он генерирует предупреждения во время выполнения:
с использованием неинициализированной переменной "foo"
Есть ли способ проверить, установлена ли переменная без генерации предупреждения и без глобального отключения предупреждения с помощью:
uninitialized_variable_warn off;
Я использую следующее, чтобы проверить, существует ли переменная:
if ($dir = false) {
set $dir "";
}
Если он не установлен до того, как достигнет этого блока местоположения, он установит для него пустую строку. Вы можете так же легко добавить строку между кавычками. Я не получаю никаких ошибок при выполнении теста конфигурации с использованием этого.
Пожалуйста, дайте мне знать, если вы считаете иначе.
Поведение, похоже, изменилось или, по крайней мере, отличалось для значений параметров запроса с использованием $arg_<name>
. В nginx 1.13.6, используя следующее, чтобы проверить, существует ли значение запроса в переменной ngx:
if ($arg_test = false) {
default_type 'text/plain';
return 404;
}
не переходит на 404. Использование:
if ($arg_test = '') {
default_type 'text/plain';
return 404;
}
возвращает 404, если параметр запроса не существует. Полезно, чтобы не попадать в восходящий поток, если необходимый параметр запроса не существует.
Если GET QUERY
определение параметров
например : foo.com?proxy proxy
переменная существует Не использовать $arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists
set $port '8080';
}
https://forum.nginx.org/read.php?2,224860,224860
Простой вариант, если вы дополнительно устанавливаете переменную во включенном файле, - это просто сначала установить значение по умолчанию.
set $value 'default';
include maybe-set-value.conf;
Второй оператор set в файле conf заменит значение по умолчанию.