Teste se a variável nginx está definida

12

Eu preciso definir uma variável para um valor padrão, se ainda não estiver definido. A seguinte configuração faz o trabalho:

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

Mas gera avisos de tempo de execução:

using uninitialized "foo" variable

Existe uma maneira de testar se uma variável é definida sem gerar o aviso e sem desativar o aviso globalmente com:

uninitialized_variable_warn off;
    
por Jan Wrobel 29.05.2013 / 12:12

4 respostas

10

Estou usando o seguinte para verificar se existe uma variável:

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

Se não estiver definido antes de atingir este bloco de localização, ele será definido como uma string em branco. Você pode facilmente adicionar uma string entre aspas. Eu não recebo nenhum erro ao fazer um teste de configuração usando isso.

Por favor, deixe-me saber se você está vendo o contrário.

    
por 05.02.2014 / 23:53
1

O comportamento parece ter mudado ou pelo menos ser diferente para valores de parâmetro de consulta usando $arg_<name> . No nginx 1.13.6, usando o seguinte para verificar se existe um valor de consulta na variável ngx:

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

não passa para o 404. Usando:

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

retorna um 404, se o parâmetro de consulta não existir. Útil para não bater a montante se um parâmetro de consulta necessário não existir.

    
por 26.07.2018 / 02:38
0

Se GET QUERY de detecção de parâmetro

por exemplo: foo.com?proxy Variável proxy existe Não use $arg_proxy

if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; } link

    
por 05.09.2018 / 04:54
0

Uma opção fácil, se você estiver configurando a variável em um arquivo incluído, é simplesmente definir o valor padrão primeiro.

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

A segunda instrução set no arquivo conf substituirá o valor padrão.

    
por 20.09.2018 / 18:07

Tags