@C_oO_re

Не удается получить переменные окружения в nginx, как быть?

Значит есть набор переменных в ОС.

...
export DEV1_PATH="/home/user/data/www/site.dev1"
...


Пытаюсь их подключить к Ngixn через perl модуль.

nginx.conf
...
env PATH;
env DEV1_PATH;
...
http {
  perl_set $root_path 'sub { return $ENV{"PATH"}; }';
  perl_set $dev1_path 'sub { return $ENV{"DEV1_PATH"}; }';
}
....


vhost.conf
server {
...
  location /test {
    echo $root_path;
    echo $dev1_path;
  }
...
}


site.loc/test
от nginx получаем
1) /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2)
  • Вопрос задан
  • 801 просмотр
Пригласить эксперта
Ответы на вопрос 1
Если используешь docker-compose то наверно самое простое будет создать файл
docker-entrypoint.sh
Со следующим содержимым:
#!/bin/bash
# shellcheck disable=SC2046
# shellcheck disable=SC2016

set -e
for f in /etc/nginx/templates/*.conf; do
  filename=$(basename "$f" .template)
  envsubst < "$f" > "/etc/nginx/$filename"
done

# Start Nginx
nginx -g 'daemon off;'


Подключить конфиги nginx и файл docker-entrypoint.sh:
volumes:
      - "./nginx/conf.d:/etc/nginx/templates:ro"
      - "./nginx/docker-entrypoint.sh:/var/docker-entrypoint.sh:ro"

И подключить env файл с переменными:
env_file:
      - "./env/VIRTUAL_HOST.env"


Содержимое VIRTUAL_HOST.env:
VIRTUAL_HOST=localhost

И теперь можно использовать переменные в nginx файлах таким образом:
server {
        server_name $VIRTUAL_HOST:8081;

        listen 80;
        root /app/web;
        index index.php;


И теперь, при каждом старте контейнера, будет производиться замена переменных на их значения в конфигурационных файлах nginx.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы