Comment définissez-vous les valeurs ENV spécifiques au serveur dans Nginx?

9

Je démarre un projet qui utilise des variables d'environnement pour définir la connexion à la base de données et quelques autres choses. (Ils ne voulaient pas utiliser les fichiers de configuration car les gens sont négligents et les écrasent).

Quoi qu'il en soit, j'utilise nginx et bien qu'il supporte env - il ne semble pas le supporter assez bien . Vous ne pouvez pas définir les valeurs env sur une base de bloc par serveur . En d'autres termes, cela ne fonctionnera pas:

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

Vous devez faire ceci:

env FOO = "bar";

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

Ce qui signifie que je ne peux pas avoir de valeurs spécifiques à vhost. Je dois donc créer une config vhost complète pour chaque site et activer uniquement celle que je veux pour le moment afin que la valeur soit correctement définie.

Y a-t-il un moyen de contourner cela?

Xeoncross
la source
La configuration nginx n'est-elle pas aussi sensible à l'écrasement que la configuration de l'application? Quel module utilise-t-il pour envoyer des demandes à l'application?
Shane Madden
@ShaneMadden, la configuration nginx ne fait pas partie du projet mais doit être créée manuellement sur chaque serveur. Il ne sera donc pas écrasé. Ce que j'ai posté n'est pas la configuration complète - nous utilisons également la norme fastcgi_passpour transmettre la demande à ruby ​​/ php.
Xeoncross

Réponses:

13

Il s'avère que si vous utilisez fastcgi, vous pouvez contourner cela en passant les valeurs 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
la source
Oui, c'est ce que j'allais suggérer. Battez-moi! (Je n'ai plus de votes pour aujourd'hui, je voterai un peu plus fort pour cette réponse)
Shane Madden
@ShaneMadden, vous pourriez peut-être m'aider .
Xeoncross
2
Y a-t-il un moyen de définir server_namedynamiquement, cependant? Puisqu'il s'agit d'un hôte virtuel fonctionnant sous OS X, l'hôte nginx a une IP différente, donc il ne se résout pas.
taco