Назад | Перейти на главную страницу

nginx устанавливает переменную в местоположении

Я пытаюсь оптимизировать свои конфигурации 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») и включить ее в 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;

Однако похоже, что nginx игнорирует переменные в этой конфигурации. Я что-то делаю неправильно или невозможно использовать переменную в путях расположения?

Переменные не могут быть нигде объявлены или использованы в какой-либо директиве.

Как документация set директива:

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

Непосредственным следствием этого является то, что вы не можете использовать пользовательские переменные в http блок.

Обновить : после обсуждения и экспериментов с АлексейTen в этом чат.

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