64 votes

nginx définit une variable dans l'emplacement

J'essaie d'optimiser mes configurations nginx, afin qu'il soit possible de définir une variable, et que tous les chemins d'accès soient 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 j'aimerais faire, c'est définir une variable (dans ce cas, 'php') et l'inclure dans la configuration.

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. Est-ce que je fais quelque chose de mal ou est-ce qu'il n'est pas possible d'utiliser des variables dans les chemins d'accès ?

95voto

berto Points 221

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

Comme la documentation de 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 fichier de type http bloc.

更新情報 : après une discussion et des expériences avec AlexeyTen dans ce chatroom .

  • access_log peut contenir des variables avec des restrictions. Parmi celles-ci, l'absence de mise en mémoire tampon et la le fait que le slash de tête ne doit pas être déclaré dans une variable .
  • error_log ne fonctionnera pas du tout avec les variables.
  • root peut contenir des variables.
  • server_name ne permet qu'une stricte $hostname comme une notation de type variable.

6voto

Muaz Al-Jarhi Points 279

Vous pouvez utiliser les variables déclarées via map comme décrit dans cette question SO, qui traite de l'utilisation de variables personnalisées dans la partie expression des blocs d'emplacement :

https://stackoverflow.com/a/61513351/1604622

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X