Preciso definir uma variável para um valor padrão, se ainda não estiver definida. A seguinte configuração faz o trabalho:
if ($foo ~ "^$") {
set $foo default-value;
}
Mas gera avisos de tempo de execução:
usando variável "foo" não inicializada
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;
set_if_empty
em github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
que não precisa ser definido globalmente, você pode defini-lo onde precisa usar variáveis potencialmente não inicializadas. Estou usando isso para passar detalhes de SSL para PHP, que estarão vazios se a página for acessada sem SSL.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
como parte de umphp.conf
que é importado apenas por locais que suportam PHP, então definitivamente estou usando-o apenas nesses escopos, deixando o aviso em qualquer outro lugar. Eu ainda nãouninitialized_variable_warn
defini nenhum outro escopo (deixando como padrãotrue
).Respostas:
Estou usando o seguinte para verificar se existe uma variável:
Se não estiver definido antes de atingir esse bloco de local, será definido como uma sequência em branco. Você pode facilmente adicionar uma string entre as aspas. Não recebo nenhum erro ao fazer um teste de configuração usando isso.
Entre em contato se você estiver vendo o contrário.
fonte
$foo ~ "^$"
O comportamento parece ter sido alterado ou pelo menos diferente para os valores dos parâmetros de consulta usando
$arg_<name>
. No nginx 1.13.6, use o seguinte para verificar se existe um valor de consulta na variável ngx:não passa para o 404. Usando:
retorna 404, se o parâmetro de consulta não existir. Útil para não atingir o upstream se um parâmetro de consulta necessário não existir.
fonte
Se a
GET QUERY
detecção de parâmetropor exemplo:
proxy
existe a variável foo.com?proxy Não use$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2,224860,224860fonte
Uma opção fácil, se você estiver configurando a variável em um arquivo incluído, é simplesmente definir o valor padrão primeiro.
A segunda instrução set no arquivo conf substituirá o valor padrão.
fonte