web-dev-qa-db-fra.com

nginx définir la variable à l'emplacement

J'essaie d'optimiser mes configurations nginx, il serait donc possible de définir une variable et tous les chemins de localisation seraient mis à jour automatiquement. J'ai quatre lignes en question:

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;

Ce que je voudrais réaliser, c'est de définir une variable (dans ce cas "php") et de l'inclure dans 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;

Cependant, il semble que nginx ignore les variables dans cette configuration. Suis-je en train de faire quelque chose de mal ou il n'est pas possible d'utiliser des variables dans les chemins de localisation?

38
Bogdan Kuštan

Les variables ne peuvent être déclarées nulle part ni être utilisées dans aucune directive.

Comme la documentation de la directive set est:

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

La conséquence immédiate est que vous ne pouvez pas utiliser de variables personnalisées dans un bloc http.

Mise à jour : après une discussion et des expériences avec AlexeyTen dans ce chatroom .

  • access_log peut contenir des variables avec des restrictions. Parmi eux, le manque de mise en mémoire tampon et le fait que la barre oblique de tête ne doit pas être déclarée dans une variable .
  • error_log ne fonctionnera pas du tout avec les variables.
  • La directive root peut contenir des variables.
  • server_name la directive autorise uniquement $hostname valeur sous forme de notation de type variable.
61
Xavier Lucas