Frage nginx setzt Variable in Position


Ich versuche, meine nginx-Konfigurationen zu optimieren, so dass es möglich wäre, eine Variable zu setzen, und alle Pfadangaben würden automatisch aktualisiert werden. Ich habe vier Zeilen in Frage:

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;

Was ich erreichen möchte, ist, eine Variable (in diesem Fall 'php') zu setzen und sie in config aufzunehmen.

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;

Es scheint jedoch, dass nginx Variablen in dieser Konfiguration ignoriert. Mache ich etwas falsch oder ist es nicht möglich, Variablen in Standortpfaden zu verwenden?


25
2017-11-17 10:58


Ursprung




Antworten:


Variablen können nirgendwo deklariert oder in einer Direktive verwendet werden.

Wie die Dokumentation von set Richtlinie ist:

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

Die unmittelbare Konsequenz ist, dass Sie keine benutzerdefinierten Variablen in einem verwenden können http Block.

Aktualisieren : nach einer Diskussion und Experimenten mit AlexeyTen in diesem Chatraum.

  • access_log kann Variablen mit Einschränkungen enthalten. Unter ihnen der Mangel an Pufferung und die Tatsache, dass der führende Schrägstrich nicht in einer Variablen deklariert werden darf.
  • error_log funktioniert überhaupt nicht mit Variablen.
  • root Direktive kann Variablen enthalten.
  • server_name Richtlinie erlaubt nur streng $hostname Wert als eine Variable-wie Notation.

42
2017-11-17 11:15



access_log/error_log arbeite mit Variablen, aber mit einigen Einschränkungen. server_name kann keine Variablen enthalten. - Alexey Ten
@AlexeyTen Lies meine Antwort noch einmal. Es funktioniert nicht mit Brauch Variablen. Servername kann enthalten eingebaut variabel wie $hostname. Die Antwort wurde aktualisiert, um dieses Verhalten zu verdeutlichen. - Xavier Lucas
Gut, $hostname ist die einzige erlaubte Variable. github.com/nginx/nginx/blob/... Eigentlich ist es eher eine magische Konstante, keine wirkliche Variable - Alexey Ten
Lasst uns setze diese Diskussion im Chat fort. - Alexey Ten
Das ist vielleicht das am besten erforschte SF Antwort überhaupt. Danke euch beiden / Cc @AlexeyTen - kaiser