¿Cómo se configuran los valores de ENV específicos del servidor en Nginx?

9

Estoy comenzando un proyecto que usa variables de entorno para establecer la conexión de la base de datos y un par de cosas más. (No querían usar archivos de configuración ya que la gente es descuidada y los sobrescribe).

De todos modos, estoy usando nginx y aunque es compatible con env , no parece ser lo suficientemente bueno . No puede establecer los valores de env por bloque de servidor . En otras palabras, esto no funcionará:

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

Tienes que hacer esto:

env FOO = "bar";

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

Lo que significa que no puedo tener valores específicos de vhost. Por lo tanto, debo crear una configuración de vhost completa para cada sitio y solo activar la que quiero en este momento para que el valor esté configurado correctamente.

¿Hay alguna forma de evitar esto?

Xeoncross
fuente
¿No es la configuración nginx tan susceptible de sobrescribirse como la configuración de la aplicación? ¿Qué módulo está utilizando para alimentar solicitudes a la aplicación?
Shane Madden
@ShaneMadden, la configuración de nginx no es parte del proyecto, pero debe crearse en cada servidor manualmente. Por lo tanto, no se sobrescribirá. Lo que publiqué no son las configuraciones completas: también estamos usando el estándar fastcgi_passpara reenviar la solicitud a ruby ​​/ php.
Xeoncross

Respuestas:

13

Resulta que si está utilizando fastcgi puede evitar esto pasando los 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
fuente
Sí, eso es lo que estaba a punto de sugerir. ¡Golpéame! (No tengo votos para hoy, votaré esta respuesta en un momento)
Shane Madden
@ShaneMadden quizás podrías ayudarme con esto .
Xeoncross
2
¿Hay alguna forma de establecer server_namedinámicamente, sin embargo? Dado que es un host virtual que se ejecuta en OS X, el host nginx tiene una IP diferente, por lo que no se resuelve.
taco