Если у вас возникли проблемы, пожалуйста, дайте мне знать, отправив электронное письмо на evgeniy@y-ea.ru. Спасибо!
День добрый! Меня зовут Евгений. Я IT специалист и web - разработчик.
Email: evgeniy@y-ea.ru
Яловой Евгений
Россия, Краснодар
Иногда нам необходимо на лету генерировать конфиги для 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}'
можно опустить.
Новый комментарий