Probar si la variable nginx está configurada

14

Necesito establecer una variable a un valor predeterminado si aún no está configurada. La siguiente configuración hace el trabajo:

if ($foo ~ "^$") {
   set $foo default-value;
}

Pero genera advertencias de tiempo de ejecución:

utilizando la variable "foo" no inicializada

¿Hay alguna manera de probar si una variable se establece sin generar la advertencia y sin desactivarla globalmente con:

uninitialized_variable_warn off;
Jan Wrobel
fuente
intente set_if_emptydesde github.com/openresty/set-misc-nginx-module
SaveTheRbtz
2
Acabo de encontrar esto mientras buscaba algo similar, pero parece que uninitialized_variable_warnno es necesario configurarlo globalmente, solo puede configurarlo donde necesita usar variables potencialmente no inicializadas. Estoy usando esto para pasar detalles SSL a PHP, que estarán vacíos si se accede a la página sin SSL.
Haravikk
@Haravikk parece que ese no es el casonginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te
¿Aún lo tienes en otro lugar? Lo uso uninitialized_variable_warncomo parte de un producto php.confimportado solo por ubicaciones que admiten PHP, por lo que definitivamente lo uso solo en esos ámbitos, mientras dejo la advertencia en cualquier otro lugar. Sin uninitialized_variable_warnembargo , no lo he configurado en ningún otro ámbito (dejándolo predeterminado true).
Haravikk

Respuestas:

11

Estoy usando lo siguiente para verificar si existe una variable:

if ($dir = false) {
    set $dir "";
}

Si no se establece antes de llegar a este bloque de ubicación, lo configurará en una cadena en blanco. Puede agregar fácilmente una cadena entre las comillas. No obtengo ningún error al hacer una prueba de configuración con esto.

Avísame si estás viendo lo contrario.

jaseeey
fuente
Estoy viendo nginx: [emerg] variable "dir" desconocida
Alex Barker
Este cheque falso ya no funciona, por favor use$foo ~ "^$"
Valdrinium
1

El comportamiento parece haber cambiado o al menos ser diferente para los valores de parámetros de consulta que se utilizan $arg_<name>. En nginx 1.13.6, use lo siguiente para verificar si existe un valor de consulta en la variable ngx:

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

no pasa al 404. Usando:

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

devuelve un 404, si el parámetro de consulta no existe. Útil para no golpear en sentido ascendente si no existe un parámetro de consulta requerido.

timbo
fuente
0

Una opción fácil, si está configurando opcionalmente la variable en un archivo incluido, es simplemente establecer primero el valor predeterminado.

set $value 'default';
include maybe-set-value.conf;

La segunda instrucción establecida en el archivo conf reemplazará el valor predeterminado.

Sam Bull
fuente