Вход

Если у вас возникли проблемы, пожалуйста, дайте мне знать, отправив электронное письмо на evgeniy@y-ea.ru. Спасибо!

Забыли пароль или не зарегестрированны?

Использование переменных из .env в конфигах nginx

Evgeniy / 16 мая 2024 / Опубликовано в Блог
Использование переменных из .env в конфигах nginx

Общие сведения

Иногда нам необходимо на лету генерировать конфиги для nginx, к примеру для разных настроек среды разработки.

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

Использование

Пример файла конфига nginx:
 

server {
    listen ${APP_PORT_EXTERNAL};
    listen    [::]:${APP_PORT_EXTERNAL};
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root ${ROOT_PATH};
    
    client_max_body_size 20M;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass ${APP_CONTAINER_NAME}:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Пример блока веб-сервера nginx в docker-compose

  #Nginx webserver Service
  webserver:
    image: nginx:mainline
    restart: always
    tty: true
    ports:
      - "${APP_PORT}:${APP_PORT_EXTERNAL}"
    volumes:      
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./logs/nginx:/var/log/nginx
    environment:
      - APP_PORT_ADS_EXTERNAL=${APP_PORT_ADS_EXTERNAL}
      - APP_CONTAINER_NAME_ADS=${APP_CONTAINER_NAME_ADS}
      - ROOT_PATH=${ROOT_PATH}
    command: /bin/bash -c "envsubst '$${APP_PORT_ADS_EXTERNAL} $${APP_CONTAINER_NAME_ADS} $${ROOT_PATH}' < /etc/nginx/conf.d/web_app.conf.template > /etc/nginx/conf.d/web_app.conf && nginx -g 'daemon off;'"
    networks:
      - internal_network

Тут мы импортируем переменные из блока environment,которые объявлены у нас в .env, говорим envsubst, что меняем только те которые мы указали, остальные не трогаем.

Так необходиму указывать переменные в envsubst если мы используем встроенные переменные среды Nginx, такие как $host и $connection, поэтому могут возникнуть проблемы и ошибки, а так же - это может привести к конфликту с нашими переменными среды. Если же, вы не используете встроенные переменные, то эту запись - 

'$${APP_PORT_ADS_EXTERNAL} $${APP_CONTAINER_NAME_ADS} $${ROOT_PATH}'

можно опустить.

 


Теги: , , , ,
Комментарии отсутствуют

Новый комментарий

Имя:
:
Для редактирования комментария осталось 10 минут
TOP

Оставить заявку