Как я могу использовать переменные среды ОС в конфигурации Nginx? - PullRequest
0 голосов
/ 09 июня 2018

Как использовать переменные окружения, установленные в ОС внутри конфигураций nginx?

Например, установлены следующие переменные среды: ENVIRON = dev, APP_NAME = test

Вот мой Dockerfile:

FROM openresty/openresty:alpine

RUN set -ex && \
    rm /etc/nginx/conf.d/default.conf

ADD nginx.conf /etc/nginx/    
ADD custom.conf /etc/nginx/conf.d/

Вот мой основной файл nginx.conf

user  nginx;
worker_processes auto;
pcre_jit on;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

env ENVIRON;
env APP_NAME;
set_by_lua $environ 'return os.getenv("ENVIRON")';
set_by_lua $appname 'return os.getenv("APP_NAME")';

http {
    server_tokens off;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

Вот мой custom.conf из /etc/nging/conf.d/

upstream app.$environ-$appname  {
      server $environ-$appname:80;
}
server {
    listen 80;
    server_name $hostname;
    error_log /dev/stdout info;
    access_log /dev/stdout;
    location / {
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      add_header X-Info proxied;    
      proxy_pass http://app.$environ-$appname;
    }
}

Спасибо!

1 Ответ

0 голосов
/ 09 июня 2018

То, что вы пытаетесь сделать, я не думаю, что вы можете сделать это.

Из документации в директиве сервера вышестоящего модуля:

Определяет адрес и другие параметры сервера.Адрес может быть указан как имя домена или IP-адрес, с дополнительным портом или как путь к сокету UNIX-домена, указанный после префикса «unix:»

Невозможно создать вышестоящие серверына лету, используя переменные.

Если вы хотите направлять подобные запросы, используйте директиву map, если во время выполнения известны разные местоположения, или установите директиву auth_request, которая указывает на приложение на вашем серверекоторый может возвращать правильные переменные для каждого запроса в режиме реального времени.Затем Nginx сохранит этот ответ в переменной, используя директиву auth_request_set.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...