Jak ustawić wartości ENV specyficzne dla serwera w Nginx?

9

Zaczynam projekt, który używa zmiennych środowiskowych do ustawienia połączenia z bazą danych i kilku innych rzeczy. (Nie chcieli używać plików konfiguracyjnych, ponieważ ludzie są nieostrożni i nadpisują je).

W każdym razie używam nginx i chociaż obsługuje env - wydaje się, że nie obsługuje go wystarczająco dobrze . Nie można ustawić wartości env dla poszczególnych bloków . Innymi słowy, to nie zadziała:

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

Musisz to zrobić:

env FOO = "bar";

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

Co oznacza, że ​​nie mogę mieć wartości specyficznych dla vhosta. Więc muszę utworzyć całą konfigurację vhost dla każdej strony i aktywować tylko tę, którą chcę w tej chwili, aby wartość była ustawiona poprawnie.

Czy jest jakiś sposób na obejście tego?

Xeoncross
źródło
Czy konfiguracja nginx nie jest tak podatna na nadpisanie jak konfiguracja aplikacji? Z jakiego modułu korzysta, aby wysyłać żądania do aplikacji?
Shane Madden,
@ShaneMadden, konfiguracja nginx nie jest częścią projektu, ale musi zostać utworzona ręcznie na każdym serwerze. Więc to nie zostanie nadpisane. To, co opublikowałem, nie jest pełną konfiguracją - używamy również standardu fastcgi_passdo przekazania żądania do ruby ​​/ php.
Xeoncross,

Odpowiedzi:

13

Okazuje się, że jeśli używasz fastcgi, możesz to obejść, przekazując wartości z 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
źródło
Tak, właśnie to chciałem zasugerować. Pokonaj mnie! (Na dziś nie mam głosów, za chwilę głosuję za odpowiedzią)
Shane Madden,
@ShaneMadden może mógłbyś mi w tym pomóc .
Xeoncross,
2
Czy jest jednak sposób na ustawienie server_namedynamiczne? Ponieważ jest to wirtualny host działający w systemie OS X, host nginx ma inny adres IP, więc nie można go rozwiązać.
taco