Как вы устанавливаете конкретные значения ENV для сервера в Nginx?


9

Я начинаю проект, который использует переменные среды, чтобы установить соединение с базой данных и пару других вещей. (Они не хотели использовать файлы конфигурации, потому что люди небрежны и перезаписывают их).

В любом случае, я использую nginx, и хотя он поддерживает env - он, кажется, не поддерживает его достаточно хорошо . Вы не можете установить значения env для каждого блока на сервере . Другими словами, это не сработает:

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

Вы должны сделать это:

env FOO = "bar";

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

Это означает, что я не могу иметь специфичные для vhost значения. Поэтому я должен создать целую конфигурацию vhost для каждого сайта и активировать только тот, который мне нужен в данный момент, чтобы значение было установлено правильно.

Есть ли способ обойти это?


Разве конфигурация nginx не так подвержена перезаписи, как конфигурация приложения? Какой модуль он использует для подачи запросов в приложение?
Шейн Мэдден

@ShaneMadden, конфигурация nginx не является частью проекта, но должна быть создана на каждом сервере вручную. Так что это не будет перезаписано. То, что я написал, не является полными конфигами - мы также просто используем стандарт fastcgi_passдля пересылки запроса на ruby ​​/ php.
Xeoncross

Ответы:


13

Оказывается, что если вы используете fastcgi, вы можете обойти это, передавая значения из 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";
    }
}

Да, это то, что я собирался предложить. Обыграй меня! (У меня нет голосов на сегодня, я немного добавлю этот ответ)
Шейн Мэдден

@ShaneMadden, возможно, вы могли бы помочь мне с этим .
Xeoncross

2
Есть ли способ установить server_nameдинамически, хотя? Поскольку это виртуальный хост, работающий в OS X, хост nginx имеет другой IP-адрес, поэтому он не разрешается.
Тако
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.