Test if nginx variable is set
I need to set a variable to a default value if it is not already set. Following config does the job:
if ($foo ~ "^$") {
set $foo default-value;
}
But it generates runtime warnings:
using uninitialized "foo" variable
Is there a way to test if a variable is set without generating the warning and without turning off the warning globally with:
uninitialized_variable_warn off;
I'm using the following to check if a variable exists:
if ($dir = false) {
set $dir "";
}
If it's not set before it reaches this location block, then it will set it to a blank string. You can just as easily add a string between the quotes. I do not get any errors when doing a configuration test using this.
Please let me know if you're seeing otherwise.
The behaviour seems to have changed or at least be different for query parameter values using $arg_<name>
. On nginx 1.13.6, using the following to check if a query value in the ngx variable exists:
if ($arg_test = false) {
default_type 'text/plain';
return 404;
}
does not pass to the 404. Using:
if ($arg_test = '') {
default_type 'text/plain';
return 404;
}
returns a 404, if the query parameter does not exist. Useful for not hitting upstream if a required query parameter does not exist.