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;
set_if_empty
desde github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
no 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.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
como parte de un productophp.conf
importado solo por ubicaciones que admiten PHP, por lo que definitivamente lo uso solo en esos ámbitos, mientras dejo la advertencia en cualquier otro lugar. Sinuninitialized_variable_warn
embargo , no lo he configurado en ningún otro ámbito (dejándolo predeterminadotrue
).Respuestas:
Estoy usando lo siguiente para verificar si existe una variable:
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.
fuente
$foo ~ "^$"
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:no pasa al 404. Usando:
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.
fuente
Si la
GET QUERY
detección de parámetrosp.ej .: : foo.com?proxy
proxy
variable existe No usar$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2,224860,224860fuente
Una opción fácil, si está configurando opcionalmente la variable en un archivo incluido, es simplemente establecer primero el valor predeterminado.
La segunda instrucción establecida en el archivo conf reemplazará el valor predeterminado.
fuente