Wie legen Sie serverspezifische ENV-Werte in Nginx fest?

9

Ich starte ein Projekt, das Umgebungsvariablen verwendet, um die Datenbankverbindung und einige andere Dinge festzulegen. (Sie wollten keine Konfigurationsdateien verwenden, da die Leute nachlässig sind und sie überschreiben).

Wie auch immer, ich benutze Nginx und obwohl es env unterstützt, scheint es es nicht gut genug zu unterstützen . Sie können die env-Werte nicht blockweise pro Server festlegen . Mit anderen Worten, das wird nicht funktionieren:

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

Du musst das tun:

env FOO = "bar";

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

Das bedeutet, dass ich keine vhost-spezifischen Werte haben kann. Daher muss ich für jede Site eine vollständige vhost-Konfiguration erstellen und nur die gewünschte aktivieren, damit der Wert korrekt eingestellt wird.

Gibt es eine Möglichkeit, dies zu umgehen?

Xeoncross
quelle
Ist die Nginx-Konfiguration nicht genauso anfällig für Überschreibungen wie die Konfiguration der Anwendung? Welches Modul wird verwendet, um Anforderungen an die Anwendung zu senden?
Shane Madden
@ShaneMadden, die nginx-Konfiguration ist nicht Teil des Projekts, sondern muss auf jedem Server manuell erstellt werden. Es wird also nicht überschrieben. Was ich gepostet habe, sind nicht die vollständigen Konfigurationen - wir verwenden auch nur Standard fastcgi_pass, um die Anfrage an Ruby / PHP weiterzuleiten.
Xeoncross

Antworten:

13

Es stellt sich heraus, dass Sie dies umgehen können, wenn Sie fastcgi verwenden, indem Sie die Werte von fastcgi_param übergeben .

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
quelle
Ja, das wollte ich vorschlagen. Schlagen Sie mich dazu! (Ich habe heute keine Stimmen mehr, ich werde diese Antwort gleich positiv bewerten)
Shane Madden
@ ShaneMadden vielleicht könntest du mir dabei helfen .
Xeoncross
2
Gibt es jedoch eine Möglichkeit, server_namedynamisch zu setzen ? Da es sich um einen virtuellen Host handelt, der unter OS X ausgeführt wird, hat der Nginx-Host eine andere IP-Adresse, sodass er nicht aufgelöst wird.
Taco