nginx imposta la variabile nella posizione


37

Sto cercando di ottimizzare le mie configurazioni nginx, quindi sarebbe possibile impostare una variabile e tutti i percorsi di posizione si aggiornerebbero automaticamente. Ho quattro righe in questione:

server_name php.domain.com;
root /srv/web/vhosts/php/web;
error_log /srv/web/vhosts/php/logs/error.log;
access_log /srv/web/vhosts/php/logs/access.log;

Quello che vorrei ottenere è impostare una variabile (in questo caso 'php') e includerla in config.

set $variable "php";
server_name $variable.domain.com;
root /srv/web/vhosts/$variable/web;
error_log /srv/web/vhosts/$variable/logs/error.log;
access_log /srv/web/vhosts/$variable/logs/access.log;

Tuttavia sembra che nginx ignori le variabili in questa configurazione. Sto facendo qualcosa di sbagliato o non è possibile utilizzare la variabile nei percorsi di posizione?

Risposte:


58

Le variabili non possono essere dichiarate da nessuna parte né essere utilizzate in nessuna direttiva.

Poiché la documentazione della setdirettiva è:

Syntax:   set $variable value;
Default:  —
Context:  server, location, if

La conseguenza immediata è che non è possibile utilizzare variabili personalizzate in un httpblocco.

Aggiornare : dopo una discussione ed esperimenti con AlexeyTen in questa chatroom .

  • access_logpuò contenere variabili con restrizioni. Tra questi, la mancanza di buffering e il fatto che la barra iniziale non deve essere dichiarata in una variabile .
  • error_log non funzionerà affatto con le variabili.
  • root La direttiva can contiene variabili.
  • server_namela direttiva consente solo un $hostnamevalore rigoroso come notazione simile a una variabile.

1
access_log/ error_loglavora con variabili, ma con alcune limitazioni. server_namenon può contenere variabili.
Alexey Ten,

@AlexeyTen Rileggi la mia risposta. Non funziona con variabili personalizzate . Il nome del server può contenere variabili integrate come $hostname. Aggiornata la risposta per chiarire quel comportamento.
Xavier Lucas,

5
Bene, $hostnameè l'unica variabile consentita. github.com/nginx/nginx/blob/… In realtà, è più simile a una costante magica, non una vera variabile
Alexey Ten,


3
Questa è forse la migliore risposta SF mai ricercata di sempre. Grazie a entrambi / Cc @AlexeyTen
kaiser,
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.