Я пытаюсь оптимизировать свои конфигурации 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
значение в виде записи, подобной переменной.