3

Я пытаюсь изменить Nginx config для моего Упругий бобовый станок развертывание. по умолчанию конфигурации является: -Как изменить конфигурацию Nginx на AWS Elastic Beanstalk

upstream nodejs { 
    server 127.0.0.1:8081; 
    keepalive 256; 
} 

server { 
    listen 8080; 


    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { 
     set $year $1; 
     set $month $2; 
     set $day $3; 
     set $hour $4; 
    } 
    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; 


} 

Я пытаюсь добавить дополнительные команды для узла расположения: -

chunked_transfer_encoding off; 
proxy_buffering off; 
proxy_cache off; 

Сначала я попытался добавить следующее к моей .ebextensions: -

files: 
    "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" : 
      mode: "000644" 
      owner: root 
      group: root 
      content: | 
      upstream nodejs { 
          server 127.0.0.1:8081; 
          keepalive 256; 
        } 

        server { 
          listen 8080; 
          if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { 
            set $year $1; 
            set $month $2; 
            set $day $3; 
            set $hour $4; 
          } 
          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; 
            chunked_transfer_encoding off; 
            proxy_buffering off; 
            proxy_cache off; 
            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; 


        } 

Однако при SSH-входе в экземпляр EC2 я вижу, что файл не изменился с оригинала. Затем я сделал еще несколько исследований, где было предложено, чтобы /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf развернуто после запущены файлы .ebextensions.

  1. http://finik.net/2014/10/29/Beanstalk/
  2. Nginx config file overwritten during Elastic Beanstalk deployment?

Так что я попытался вместо следующее: -

files: 
    "/tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf" : 
      mode: "000755" 
      owner: root 
      group: root 
      content: | 
      upstream nodejs { 
          server 127.0.0.1:8081; 
          keepalive 256; 
        } 

        server { 
          listen 8080; 
          if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { 
            set $year $1; 
            set $month $2; 
            set $day $3; 
            set $hour $4; 
          } 
          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; 
            chunked_transfer_encoding off; 
            proxy_buffering off; 
            proxy_cache off; 
            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; 


        } 

Опять же, на SSH-джеями в экземпляр я могу видеть, что ни /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf или /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf прибудете модифицировано.

Так что теперь я очень застрял. Какие у меня варианты?

+0

Формат '.ebextensions' - это YAML или JSON. И ваш формат конфигурации - YAML. YAML нуждается в правильном отступе. В приведенной выше конфигурации, похоже, что отступ неправильный ('files:' и '" /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf ":' не должен совпадать с отступом). –

ответ

1

Что работает, написав сценарий sed, который обновляет файл 00_elastic_beanstalk_proxy.conf (выполнив поиск и замену) и запустив указанный скрипт на крючок container_command.

Вы можете иметь .ebextensions файл вроде этого:

files: 
    /tmp/deployment/custom_mod_nginx.sh: 
    mode: "000755" 
    content: | 
     sed -i 's/proxy_http_version 1.1;/  proxy_http_version 1.1;\n  chunked_transfer_encoding off;\n  proxy_buffering off;\n proxy_cache off;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 
container_commands: 
    nginx_real_ip: 
    command: "/tmp/deployment/custom_mod_nginx.sh" 

Что это будет сделать, это создать скрипт с именем custom_mod_nginx.sh (юй может использовать имя, которое вы хотите). Сценарий выполняется после того, как beanstalk развернул конфигурацию.