Настройка конфигурационных файлов nginx в AWS elasticbeanstalk с .ebextensions не найдена

#amazon-web-services #spring-boot #ssl #nginx #amazon-elastic-beanstalk

#amazon-веб-сервисы #весенняя загрузка #ssl #nginx #amazon-elastic-beanstalk

Вопрос:

Я пытаюсь включить https для моего серверного сервера springboot, развернутого на AWS elastic beanstalk, с помощью самоподписанного SSL. Я следовал онлайн-руководствам, чтобы изменить конфигурацию nginx с помощью нового https-instance.config.

 files:
  /etc/nginx/conf.d/myconf.conf:
    mode: "conf"
    owner: root
    group: root
    content: |
      # HTTPS server

      server {
        listen 443;
        server_name localhost;

        ssl on;
        ssl_certificate /etc/pki/tls/certs/server.crt;
        ssl_certificate_key /etc/pki/tls/certs/server.key;
        ssl_prefer_server_ciphers on;

        location / {
          proxy_pass  http://localhost:5000;
          proxy_http_version  1.1;
          proxy_set_header  Connection "";
          proxy_set_header  Host  $host;
          proxy_set_header  X-Real-IP  $remote_addr;
          proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
      }

  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
 mycert
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
mykey
      -----END RSA PRIVATE KEY-----

  /opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh:
      mode: "000755"
      owner: root
      group: root
      content: |
        #!/usr/bin/env bash
        sudo service nginx restart

  

Когда я подключаюсь по ssh к своему экземпляру, я не могу найти свои файлы myconf.conf в разделе conf.d. Запуск service nginx status выдает мне

 ● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/nginx.service.d
           └─nginx.conf
   Active: active (running) since Wed 2020-08-26 03:06:34 UTC; 15min ago
  Process: 28894 ExecStartPost=/bin/sh -c systemctl show -p MainPID nginx.service | cut -d= -f2 > /var/pids/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 28890 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 28887 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 28886 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 28893 (nginx)
   CGroup: /system.slice/nginx.service
           ├─28893 nginx: master process /usr/sbin/nginx
           └─28897 nginx: worker process

Aug 26 03:06:34  systemd[1]: Starting The nginx HTTP and reverse proxy server...
Aug 26 03:06:34 nginx[28887]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Aug 26 03:06:34  nginx[28887]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Aug 26 03:06:34  systemd[1]: Started The nginx HTTP and reverse proxy server.
  

Что я упускаю. Это мой первый проект на AWS EBS.

Примечание: я запускаю единый экземпляр бесплатного уровня для EBS

Ответ №1:

nginx Настройка, которую вы пытаетесь использовать ( /etc/nginx/conf.d/myconf.conf ), предназначена для Amazon Linux 1.

Но, похоже, вы используете Amazon Linux 2 (AL2). Таким образом, вы должны использовать разные файлы для настройки nginx. Для AL2 настройки nginx должны быть в .platform/nginx/conf.d/ , а не в .ebextentions , как показано в документах.

Следовательно, у вас может быть следующее .platform/nginx/conf.d/myconfig.conf с содержимым:

 server {
    listen 443;
    server_name localhost;

    ssl on;
    ssl_certificate /etc/pki/tls/certs/server.crt;
    ssl_certificate_key /etc/pki/tls/certs/server.key;
    ssl_prefer_server_ciphers on;

    location / {
      proxy_pass  http://localhost:5000;
      proxy_http_version  1.1;
      proxy_set_header  Connection "";
      proxy_set_header  Host  $host;
      proxy_set_header  X-Real-IP  $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
  

Выше приведен пример только файла конфигурации. Я не могу проверить, действительно ли настройка будет работать, но вы определенно используете неправильные папки для настройки параметров nginx в AL2.

Моя рекомендация состояла бы в том, чтобы сначала попытаться заставить его работать вручную через ssh. Возможно, вам потребуется перезаписать все настройки nginx, если ничего не работает, предоставив свой собственный .platform/nginx/nginx.conf файл.

Комментарии:

1. Спасибо, Марчин, мне не приходило в голову, что это может быть неправильная версия Linux!

2. Большое вам спасибо! Я потратил много времени на просмотр документов / руководств AWS (но я предполагаю, что это было для неправильной версии). Я не мог понять, почему мои конфигурации не отображались при входе по ssh.

3. .platform/nginx/nginx.conf выполняется ли это раньше .platform/hooks ? У меня есть такая настройка, но всегда выдает ошибку, что файл .crt не существует. Файл, созданный с помощью certbot , который выполняется на .platform/hooks/prebuild

Ответ №2:

Amazon Linux 2: вы должны создать файл в папке, той же иерархической, где вы на самом деле хотите разместить его на Elasticbeanstalk. Например, для меня в EBS мне нужно создать пользовательский файл conf в /etc/nginx/conf.d/elasticbeanstalk/ Для этого моя структура папок будет: введите описание изображения здесь

и в файл я могу добавить необходимые конфигурации:

 location / {
            try_files $uri $uri/ /index.php?$args;
      }
  

Ответ №3:

Найдите тип Amazon Linux 2 (AL2) на панели управления Elastic Beanstalk:

Тип платформы Elastic Beanstalk

Создайте следующую структуру каталогов из корневого каталога вашего приложения:

 .platform/nginx/conf.d/
  

Создайте следующий файл:

 .platform/nginx/conf.d/01_custom_ngix.conf
  

добавьте следующее в созданный вами файл 01_custom_ngix.conf:

 add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
  

Git зафиксирует ваши изменения (обязательно сделайте это перед развертыванием, потому что ваш код не будет развернут при использовании eb deploy, если вы не зафиксируете свои изменения)

Разверните свой код:

 > eb deploy 
  

параметры: eb deploy —подробный —debug

Проверьте свой http-ответ с помощью http cli:

 > http https://name-of-nodejs-server.domain.com
  

вывод:

 HTTP/1.1 200 OK
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length,Content-Range
Connection: keep-alive
Content-Length: 22
Content-Type: text/html; charset=utf-8
Date: Thu, 26 Aug 2021 02:33:30 GMT
ETag: W/"16-dDAEIDLSKDKGJGJGKDLASE"
Server: nginx/1.20.0
X-Powered-By: Express
  

Выполнено

Необязательно, вы также можете увеличить свой client_max_body_size, добавив следующее в свой 01_custom_ngix.conf:

 client_max_body_size 1000M;
client_body_buffer_size 100M;
....
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;