Файл конфигурации Nginx перезаписан во время развертывания Elastic Beanstalk?
мне нужно добавить заголовки p3p в статическое местоположение ресурса на стандартном NodeJS & Nginx Elastic Beanstalk.
Я создал ebextension
скрипт, как объяснено на этот вопрос. Скрипт использует sed для добавления .
скрипт не только изменяет файл, но и копирует его в" безопасное " место, т. е. /home/ec2-user. В соответствии с /var/log/cfn-init.log
скрипт работает правильно. В качестве доказательства копия измененного файла показывает дополнительный заголовок в нужном месте. Но ... -Файл -3-->не имеет этой модификации.
Я могу только вывести, что, хотя мой скрипт работает нормально, что-то еще позже в процессе развертывания перезаписывает его. Что странно, потому что в соответствии с документацией команды контейнера запускаются после настройки приложения и веб-сервера, поэтому я не посмотрим, что получится.
Итак, ho / что перезаписывает этот файл и как я могу это предотвратить?
5 ответов
похоже, что эластичный Бобовый Стебель изменился и обычно рекомендуемый подход/Хак перезаписи #etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
больше не работает. Как и создание любой файл в /tmp/deployment / config.
решение, которое я нашел, было перезаписать /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
напрямую, используя container_commands директива, так как эти команды выполняются после установки эластичного бобового стебля, создает его версию конфигурации nginx.
они [container_commands] запускаются после настройки приложения и веб-сервера и извлечения файла версии приложения, но до развертывания версии приложения.
Я сделал это в три шага в течение .ebextensions:
создайте мою версию конфигурации nginx файл.
создайте скрипт для перезаписи стандартного конфигурационного файла моим собственным.
запустить скрипт.
первые два шага происходят ранее в процессе установки, в то время как последний использует container_commands так, как описано выше, происходит поздно в установке.
вот файлы, которые я использовал:
.ebextensions / install_nginx_config_01.config:
(Обратите внимание, что отступ важен)
#
# STEP 1 - Create the nginx config file
#
files:
"/tmp/my.nginx.conf" :
mode: "000755"
owner: root
group: root
content: |
# This file was overwritten during deployment
# by .ebextensions/install_nginx_config_03.config
upstream nodejs {
server 127.0.0.1:3000;
keepalive 256;
}
server {
listen 8080;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
.ebextensions / install_nginx_config_02.config:
#
# STEP 2 - Create a script that will overwrite the Nginx config
#
files:
"/tmp/install-nginx-config.sh" :
mode: "000755"
owner: root
group: root
content: |
#!/bin/sh
cp /tmp/my.nginx.conf /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
.ebextensions / install_nginx_config_03.config:
#
# STEP 3 - Run the script to overwrite the nginx config template.
#
container_commands:
01_runmyshellscript:
command: "/tmp/install-nginx-config.sh"
проведя почти весь день и опробовав все возможные решения, начиная с 17 июля 2017, вышеуказанное решение не работает.
Для меня я хотел заменить /etc/nginx / conf.d / elasticbeanstalk / 00_application.conf
Я создал показанную ниже структуру папок в my .папка ebextension и файл были перезаписаны моим контентом. Это решение также работало для nginx.conf, который находится в папке / etc/nginx
на момент написания этой статьи правильный способ обновления / добавления значений в адресу http config в без перезаписи добавить до .ebextensions
папка, которая выглядит так:
files:
"/etc/nginx/conf.d/custom_nginx.conf":
content: |
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
это создает новый файл с именем custom_nginx.conf
на . С содержит
http {
include /etc/nginx/conf.d/*.conf;
}
при запуске сервера он вытащит 4 тайм-аута vars из custom_nginx.conf
в раздел http nginx.conf
чтобы изменить файл конфигурации без его перезаписи, решением является изменение файла шаблона, расположенного по адресу /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
Я обновляю этот файл, чтобы добавить нужную директиву, и он автоматически развертывается в /etc/nginx/conf.d
и вуаля!, модификация активный.
вот последние инструкции от Amazon, по состоянию на август 2018 года: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/nodejs-platform-proxy.html
(Я только что использовал эти инструкции для настройки прокси-сервера Nginx для узла.JS app на эластичном бобовом стебле, и он работает так, как ожидалось.)
в основном вы используете свой собственный прокси.conf для Nginx и удалите автоматически сгенерированный материал.
# .ebextensions/proxy.config
files:
/etc/nginx/conf.d/proxy.conf:
mode: "000644"
owner: root
group: root
content: |
upstream nodejs {
server 127.0.0.1:5000;
keepalive 256;
}
server {
listen 8080;
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
set $year ;
set $month ;
set $day ;
set $hour ;
}
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location /static {
alias /var/app/current/static;
}
}
/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash -xe
rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
service nginx stop
service nginx start
container_commands:
removeconfig:
command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"