Назад | Перейти на главную страницу

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

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

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

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

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

env FOO = "bar";

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

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

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

Оказывается, если вы используете 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";
    }
}