Назад | Перейти на главную страницу

Проверить, установлена ​​ли переменная nginx

Мне нужно установить для переменной значение по умолчанию, если оно еще не установлено. Следующая конфигурация выполняет свою работу:

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 заменит значение по умолчанию.