Verifica se è impostata la variabile nginx


14

Devo impostare una variabile su un valore predefinito se non è già impostata. La seguente configurazione fa il lavoro:

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

Ma genera avvisi di runtime:

utilizzando la variabile "foo" non inizializzata

Esiste un modo per verificare se una variabile è impostata senza generare l'avviso e senza disattivare l'avviso a livello globale con:

uninitialized_variable_warn off;


2
L' uninitialized_variable_warnho appena trovato mentre cercavo qualcosa di simile, ma sembra che non debba essere impostato a livello globale, puoi semplicemente impostarlo dove devi usare variabili potenzialmente non inizializzate. Sto usando questo per passare i dettagli SSL a PHP, che sarà vuoto se si accede alla pagina senza SSL.
Haravikk,

@Haravikk sembra che non sia cosìnginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

Lo hai ancora impostato altrove? Sto usando uninitialized_variable_warncome parte di un file php.confimportato solo da posizioni che supportano PHP, quindi lo userò sicuramente solo in quegli ambiti, lasciando l'avvertimento ovunque. Non ho uninitialized_variable_warnimpostato alcun altro ambito (lasciandolo predefinito true).
Haravikk,

Risposte:


11

Sto usando il seguente per verificare se esiste una variabile:

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

Se non è impostato prima che raggiunga questo blocco posizione, verrà impostato su una stringa vuota. Puoi altrettanto facilmente aggiungere una stringa tra virgolette. Non ottengo alcun errore quando eseguo un test di configurazione usando questo.

Per favore fatemi sapere se state vedendo diversamente.


Sto vedendo nginx: [emerge] variabile "dir" sconosciuta
Alex Barker,

Questo falso controllo non funziona più, si prega di utilizzare$foo ~ "^$"
Valdrinium

1

Il comportamento sembra essere cambiato o almeno essere diverso per i valori dei parametri di query utilizzando $arg_<name>. Su nginx 1.13.6, utilizzare quanto segue per verificare se esiste un valore di query nella variabile ngx:

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

non passa al 404. Utilizzando:

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

restituisce un 404, se il parametro query non esiste. Utile per non colpire a monte se non esiste un parametro di query richiesto.



0

Un'opzione semplice, se si imposta facoltativamente la variabile in un file incluso, è semplicemente impostare prima il valore predefinito.

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

La seconda istruzione set nel file conf sostituirà il valore predefinito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.