Come si impostano i valori ENV specifici del server in Nginx?


9

Sto iniziando un progetto che utilizza le variabili di ambiente per impostare la connessione al database e un paio di altre cose. (Non volevano usare i file di configurazione poiché le persone sono incuranti e li sovrascrivono).

Ad ogni modo, sto usando nginx e mentre supporta env - non sembra supportarlo abbastanza bene . Non è possibile impostare i valori env in base al blocco per server . In altre parole, questo non funzionerà:

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

Devi fare questo:

env FOO = "bar";

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

Ciò significa che non posso avere valori specifici del vhost. Quindi devo creare un'intera configurazione di vhost per ogni sito e attivare solo quella che desidero al momento in modo che il valore sia impostato correttamente.

C'è un modo per aggirare questo?


La configurazione di nginx non è suscettibile alla sovrascrittura quanto la configurazione dell'applicazione? Quale modulo utilizza per inviare richieste all'applicazione?
Shane Madden,

@ShaneMadden, la configurazione nginx non fa parte del progetto ma deve essere creata manualmente su ciascun server. Quindi non verrà sovrascritto. Quello che ho pubblicato non è la configurazione completa - stiamo anche usando lo standard fastcgi_passper inoltrare la richiesta a ruby ​​/ php.
Xeoncross,

Risposte:


13

Si scopre che se si utilizza fastcgi è possibile aggirare questo passaggio passando i valori da 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";
    }
}

Sì, è quello che stavo per suggerire. Sconfiggimi! (Non ho voti per oggi, voterò questa risposta tra poco)
Shane Madden,

@ShaneMadden forse potresti aiutarmi con questo .
Xeoncross,

2
C'è un modo per impostare server_namedinamicamente, però? Dal momento che è un host virtuale in esecuzione su OS X, l'host nginx ha un IP diverso, quindi non si risolve.
Taco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.