nginx set variável no local

27

Estou tentando otimizar minhas configurações de nginx, portanto, seria possível definir uma variável e todos os caminhos de localização seriam atualizados automaticamente. Eu 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 na configuração.

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 nginx ignora variáveis nesta configuração. Estou fazendo algo errado ou não é possível usar variáveis em caminhos de localização?

    
por Bogdan Kuštan 17.11.2014 / 11:58

1 resposta

46

As variáveis não podem ser declaradas em qualquer lugar nem usadas em nenhuma diretiva.

Como a documentação da diretiva set é:

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

A consequência imediata é que você não pode usar variáveis personalizadas em um bloco http .

Atualização : depois de uma discussão e experiências com AlexeyTen neste sala de bate-papo .

  • access_log pode conter variáveis com restrições. Entre eles, a falta de buffering e o fato de que a barra inicial não deve ser declarada em uma variável .
  • error_log não funciona com variáveis.
  • root directive pode conter variáveis.
  • A diretiva server_name permite somente o valor estrito $hostname como uma notação variável.
por 17.11.2014 / 12:15