nginx ustawia zmienną w lokalizacji

37

Próbuję zoptymalizować moje konfiguracje nginx, więc możliwe byłoby ustawienie jednej zmiennej, a wszystkie ścieżki lokalizacji byłyby aktualizowane automatycznie. Mam cztery pytania:

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;

Chciałbym ustawić jedną zmienną (w tym przypadku „php”) i dołączyć ją do konfiguracji.

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;

Wydaje się jednak, że nginx ignoruje zmienne w tej konfiguracji. Czy robię coś źle, czy nie można użyć zmiennej w ścieżkach lokalizacji?

Bogdan Kuštan
źródło

Odpowiedzi:

58

Zmiennych nie można nigdzie deklarować ani używać w żadnej dyrektywie.

Ponieważ dokumentacja setdyrektywy jest:

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

Bezpośrednią konsekwencją jest to, że nie można używać zmiennych niestandardowych w httpbloku.

Aktualizacja : po dyskusji i eksperymentach z AlexeyTen w tym czacie .

  • access_logmoże zawierać zmienne z ograniczeniami. Wśród nich brak buforowania i fakt, że początkowy ukośnik nie może być deklarowany w zmiennej .
  • error_log w ogóle nie będzie działać ze zmiennymi.
  • root dyrektywa może zawierać zmienne.
  • server_namedyrektywa dopuszcza jedynie ścisłą $hostnamewartość jako notację zmienną.
Xavier Lucas
źródło
1
access_log/ error_logpracuj ze zmiennymi, ale z pewnymi ograniczeniami. server_namenie może zawierać zmiennych.
Alexey Ten
@AlexeyTen Ponownie przeczytaj moją odpowiedź. Nie działa ze zmiennymi niestandardowymi . Nazwa serwera może zawierać wbudowane zmienne, takie jak $hostname. Zaktualizowałem odpowiedź, aby wyjaśnić to zachowanie.
Xavier Lucas
5
Cóż, $hostnamejest jedyną dozwoloną zmienną. github.com/nginx/nginx/blob/… W rzeczywistości jest to raczej magiczna stała, a nie prawdziwa zmienna
Alexey Ten
1
Daj nam kontynuować tę dyskusję w czacie .
Alexey Ten
3
To może najlepiej zbadane SF odpowiedź kiedykolwiek. Dzięki wam obojgu / Cc @AlexeyTen
Kaiser