nginx встановити змінну в розташуванні


37

Я намагаюся оптимізувати свої конфігурації nginx, тому можна було б встановити одну змінну, і всі шляхи до розташування автоматично оновлювалися б. У мене є чотири рядки:

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;

Що я хотів би досягти - це встановити одну змінну (в даному випадку 'php') і включити її в налаштування.

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;

Однак, здається, що nginx ігнорує змінні в цій конфігурації. Я щось роблю неправильно чи неможливо використовувати змінну в шляхах розташування?

Відповіді:


58

Змінні не можна декларувати ніде і не використовувати в будь-якій директиві.

Оскільки документація setдирективи:

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

Безпосереднім наслідком є ​​те, що ви не можете використовувати спеціальні змінні в httpблоці.

Оновлення : після дискусії та експериментів з AlexeyTen у цій чаті .

  • access_logможе містити змінні з обмеженнями. Серед них відсутність буферизації та те, що провідна коса риса не повинна бути оголошена змінною .
  • error_log взагалі не працюватиме зі змінними.
  • root Директива може містити змінні.
  • server_nameДиректива допускає лише суворе $hostnameзначення як позначення, подібне до змінної.

1
access_log/ error_logробота зі змінними, але з деякими обмеженнями. server_nameне може містити змінних.
Олексій Десять

@AlexeyTen Перечитайте мою відповідь. Він не працює зі спеціальними змінними. Ім'я сервера може містити вбудовану змінну типу $hostname. Оновили відповідь, щоб уточнити таку поведінку.
Ксав'є Лукас

5
Ну, $hostnameє єдиною дозволеною змінною. github.com/nginx/nginx/blob/… Насправді це більше схоже на магічну константу, а не на справжню змінну
Олексій Десять


3
Це може бути найбільш дослідженим SF відповідь коли - або. Дякую обом / Cc @AlexeyTen
kaiser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.