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