nginx establece la variable en la ubicación


37

Estoy tratando de optimizar mis configuraciones nginx, por lo que sería posible establecer una variable, y todas las rutas de ubicación se actualizarían automáticamente. Tengo cuatro líneas en cuestión:

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;

Lo que me gustaría lograr es establecer una variable (en este caso, 'php') e incluirla en 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;

Sin embargo, parece que nginx ignora las variables en esta configuración. ¿Estoy haciendo algo mal o no es posible usar variables en las rutas de ubicación?

Respuestas:


58

Las variables no pueden declararse en ninguna parte ni usarse en ninguna directiva.

Como la documentación de la setdirectiva es:

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

La consecuencia inmediata es que no puede usar variables personalizadas en un httpbloque.

Actualización : después de una discusión y experimentos con AlexeyTen en esta sala de chat .

  • access_logpuede contener variables con restricciones. Entre ellos, la falta de almacenamiento en búfer y el hecho de que la barra diagonal principal no debe declararse en una variable .
  • error_log no funcionará con variables en absoluto.
  • root La directiva puede contiene variables.
  • server_nameLa directiva solo permite un $hostnamevalor estricto como una notación de tipo variable.

1
access_log/ error_logtrabajo con variables, pero con algunas limitaciones. server_nameNo puede contener variables.
Alexey Ten

@AlexeyTen Vuelva a leer mi respuesta. No funciona con variables personalizadas . El nombre del servidor puede contener variables integradas como $hostname. Se actualizó la respuesta para aclarar ese comportamiento.
Xavier Lucas

55
Bueno, $hostnamees la única variable permitida. github.com/nginx/nginx/blob/… En realidad, es más como una constante mágica, no una variable real
Alexey Ten


3
Esta es quizás la mejor respuesta SF investigada. Gracias a los dos / Cc @AlexeyTen
kaiser
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.