Файл конфигурации 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.

от http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands:

они [container_commands] запускаются после настройки приложения и веб-сервера и извлечения файла версии приложения, но до развертывания версии приложения.

Я сделал это в три шага в течение .ebextensions:

  1. создайте мою версию конфигурации nginx файл.

  2. создайте скрипт для перезаписи стандартного конфигурационного файла моим собственным.

  3. запустить скрипт.

первые два шага происходят ранее в процессе установки, в то время как последний использует 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 enter image description here


на момент написания этой статьи правильный способ обновления / добавления значений в адресу 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"