Как вы устанавливаете конкретные значения 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 для каждого сайта и активировать только тот, который мне нужен в данный момент, чтобы значение было установлено правильно.

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

Xeoncross
источник
Разве конфигурация 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";
    }
}
Xeoncross
источник
Да, это то, что я собирался предложить. Обыграй меня! (У меня нет голосов на сегодня, я немного добавлю этот ответ)
Шейн Мэдден
@ShaneMadden, возможно, вы могли бы помочь мне с этим .
Xeoncross
2
Есть ли способ установить server_nameдинамически, хотя? Поскольку это виртуальный хост, работающий в OS X, хост nginx имеет другой IP-адрес, поэтому он не разрешается.
Тако