variável nginx definida no local

37

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

Bogdan Kuštan
fonte

Respostas:

58

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

Como a documentação da setdiretiva é:

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

A conseqüência imediata é que você não pode usar variáveis ​​personalizadas em um httpbloco.

Atualização : após uma discussão e experimentos com AlexeyTen nesta sala de bate - papo .

  • access_logpode conter variáveis ​​com restrições. Entre eles, a falta de buffer e o fato de que a barra principal não deve ser declarada em uma variável .
  • error_log não funcionará com variáveis.
  • root diretiva pode contém variáveis.
  • server_nameA diretiva permite apenas um $hostnamevalor estrito como uma notação de variável.
Xavier Lucas
fonte
1
access_log/ error_logtrabalho com variáveis, mas com algumas limitações. server_namenão pode conter variáveis.
Alexey Dez
@AlexeyTen Releia minha resposta. Não funciona com variáveis personalizadas . Nome do servidor pode conter built-in variável como $hostname. Atualizado a resposta para esclarecer esse comportamento.
Xavier Lucas
5
Bem, $hostnameé a única variável permitida. github.com/nginx/nginx/blob/... Na verdade, é mais como uma constante mágica, não uma variável real
Alexey Ten
1
Vamos continuar esta discussão no chat .
Alexey Dez
3
Esta é talvez a melhor resposta SF pesquisada de todos os tempos. Obrigado a vocês / Cc @AlexeyTen
kaiser