Estou tentando otimizar minhas configurações do nginx, para que seja possível definir uma variável e todos os caminhos de localização sejam atualizados automaticamente. Tenho quatro linhas em questão:
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;
O que eu gostaria de conseguir é definir uma variável (neste caso, 'php') e incluí-la no 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;
No entanto, parece que o nginx ignora variáveis nesta configuração. Estou fazendo algo errado ou não é possível usar variável nos caminhos de localização?
As variáveis não podem ser declaradas em nenhum lugar nem usadas em nenhuma diretiva.
Como a documentação da
set
diretiva é:A consequência imediata é que você não pode usar variáveis personalizadas em um
http
bloco.Atualização : após uma discussão e experimentos com AlexeyTen nesta sala de bate- papo .
access_log
pode conter variáveis com restrições. Entre eles, a falta de buffer e o fato de que a barra inicial não deve ser declarada em uma variável .error_log
não funcionará com variáveis.root
A diretiva pode conter variáveis.server_name
A diretiva só permite valor estrito$hostname
como uma notação de variável.Você pode usar variáveis declaradas via
map
conforme descrito nesta pergunta SO, que discute o uso de variáveis personalizadas na parte da expressão dos blocos de localização:https://stackoverflow.com/a/61513351/1604622