Como você define valores ENV específicos do servidor no Nginx?

9

Estou iniciando um projeto que usa variáveis ​​de ambiente para definir a conexão com o banco de dados e algumas outras coisas. (Eles não queriam usar arquivos de configuração, pois as pessoas são descuidadas e as substituem).

De qualquer forma, estou usando o nginx e, embora ele suporte env - ele não parece suportá-lo suficientemente bem . Você não pode definir os valores env em uma base de bloco por servidor . Em outras palavras, isso não funcionará:

server {
    listen 80;
    server_name domain;
    env FOO = "bar";
}

Você deve fazer isso:

env FOO = "bar";

http {
    server {
        listen 80;
        server_name domain;
    }
}

O que significa que não posso ter valores específicos de vhost. Portanto, devo criar uma configuração inteira do vhost para cada site e ativar apenas o que desejo no momento, para que o valor seja definido corretamente.

Existe alguma maneira de contornar isso?

Xeoncross
fonte
A configuração do nginx não é tão suscetível à substituição quanto a configuração do aplicativo? Qual módulo ele está usando para alimentar solicitações para o aplicativo?
Shane Madden
@ShaneMadden, a configuração nginx não faz parte do projeto, mas deve ser criada em cada servidor manualmente. Portanto, não será substituído. O que eu postei não são as configurações completas - também estamos usando o padrão fastcgi_passpara encaminhar a solicitação para o ruby ​​/ php.
Xeoncross

Respostas:

13

Acontece que, se você estiver usando o fastcgi, poderá contornar isso passando os valores de fastcgi_param .

server {
    listen 80;
    server_name domain;

    # Pass PHP scripts to php-fastcgi listening on port 9000
    location ~ path/to/it {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param FOO "bar";
    }
}
Xeoncross
fonte
Sim, era isso que eu estava prestes a sugerir. Bata em mim! (Estou sem votos para hoje, vou votar mais adiante esta resposta) #
Shane Madden
@ShaneMadden talvez você possa me ajudar com isso .
Xeoncross
2
Existe alguma maneira de definir server_namedinamicamente? Como é um host virtual em execução no OS X, o host nginx tem um IP diferente, portanto não é resolvido.
taco