Доступ к свойствам среды Elasti c Beanstalk в конфигурациях NGINX, запущенных на AWS Linux 2 - PullRequest
3 голосов
/ 05 мая 2020

Я работал раньше с AWS Linux AMI, но не повезло с AWS Linux 2.

Мне нужно получить доступ к свойствам моей среды из файла конфигурации Nginx во время Развертывание приложения EB. Это сервер с одним экземпляром узла.

Я сделал это с помощью AMI AWS Linux, и он работал без проблем:

.ebextensions / 00_options.config

option_settings:
   aws:elasticbeanstalk:application:environment:
      DOMAIN: socket.example.com
      MASTER_DOMAIN: https://example.com
      etc..

.ebextensions / 10_proxy.config

... some configs ...

files:

  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |

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

      map $http_origin $cors_header {
          hostnames;
          default "";
          `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MASTER_DOMAIN"}}` "$http_origin";
      }

      server {

          listen 80;
          listen 8080;

          server_name `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "DOMAIN"}}`;

          location ~ /.well-known {
              allow all;
              root /usr/share/nginx/html;
          }
          location / {
              return 301 https://$host$request_uri;
          }
      }
      
      etc..


.... some more configs ....
      

Я не включаю большинство приведенных выше конфигураций, потому что они не имеют отношения.

Итак, когда я делал это раньше, все заработало как положено. Файл конфигурации вставил мои свойства и создал файл в папке /etc/nginx/conf.d/proxy.conf.

Теперь с AWS Linux 2 спецификации изменились, и мы должны добавить наши файлы конфигурации Nginx в папку .platform/nginx/conf.d, расположенную в нашей папке пакета приложений root.

Здесь ссылка (см. Конфигурация обратного прокси )

Итак, я создал файл proxy.conf в указанном выше месте с содержимым, которое было ранее вставлено в /etc/nginx/conf.d/proxy.conf .

.platform / nginx / conf.d / proxy.conf

upstream nodejs {
    server 127.0.0.1:8081;
    keepalive 256;
}
    
map $http_origin $cors_header {
    hostnames;
    default "";
   `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MASTER_DOMAIN"}}` "$http_origin";
}

etc...

А потом начались проблемы ..

Эта первая проба выкинула unexpected "{" in /var/proxy/staging/nginx/conf.d/proxy.conf:11 на меня.

И после этого много чего перепробовал. Пробовал с ${MASTER_DOMAIN} и возился с новым EB AWS Linux 2 hooks (см. Ссылку выше Крючки платформы ). Все напрасно, похоже, вы не можете получить доступ к свойствам из конфигураций Nginx. Я прочитал статью или документацию из Nginx, в которых сегодня упоминается нечто подобное, но я больше не могу это найти (много гуглил).

Я также попытался создать файл конфигурации, как и в рабочей версии, целью которого было сохранить где-нибудь временный файл с включенными свойствами, а затем включить этот файл в необходимый файл .platform/nginx/conf.d/proxy.conf, потому что я начал думать, что там невозможно включить их напрямую в новые спецификации.

.ebextensions / 10_proxy.config

... some configs ....

files:

  /var/proxy/staging/custom_folder/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
    
    etc...

.platform / nginx / conf.d / proxy.conf

include custom_folder/proxy.conf;

Имея в виду эту идею, я наделал много глупостей, я создал hooks для создания (mkdir) каталогов, в которых я пытался временно сохранить файл, что приводило к новым ошибкам разрешений. Мне не удалось предоставить необходимые разрешения для файлов prebuild, postdeploy, но это другая проблема.

И еще много попыток и неудач ...

Но потом я прочитал (также из ссылки выше):

" Если вы настроили свой прокси для отправки трафика c нескольким процессам приложений, вы можете настроить несколько свойства среды и использовать их значения как в конфигурации прокси , так и в коде вашего приложения."

И надежда вернулась ... Означает ли это, что я на самом деле CAN напрямую добавлять переменные окружения в конфигурации Nginx, расположенные в каталоге .platform? ... Не знаю .. А вы?

Я мог бы продолжать описывать все, что пробовал всю ночь, так что я остановлюсь на этом. Надеюсь, вы поняли проблему. Если нет, спросите меня, и я сделаю все возможное, чтобы все это было понятно.

Кроме того, после 14 часов борьбы с этой проблемой мой разум уже не очень ясен. Мне нужен перерыв.

Если вы сделали это до конца, спасибо за ваше время, и вам будет очень благодарна за помощь.

...