Как включить HTTPS в AWS Docker

#amazon-web-services #nginx #https

#amazon-веб-сервисы #nginx #https

Вопрос:

Привет,

Я изо всех сил пытался запустить один экземпляр Docker с HTTPS на AWS.

HTTP-доступ работает правильно, но я не могу получить доступ к HTTPS (Google Chrome показывает «Этот сайт недоступен»).

Здесь у нас есть единственный экземпляр с Elastic Beanstalk. Таким образом, балансировщик нагрузки отсутствует, а сертификаты размещаются в экземпляре.

Я следовал этому руководству: AWS HTTPS Single Instance Docker

Экземпляр работает правильно, мои сертификаты загружены правильно, а также конфигурация nginx. Это то, что я получил до сих пор:

  • Пытался настроить группу безопасности на разрешение TCP 443, не сработало.
  • Пытался настроить группу безопасности, чтобы разрешить весь трафик в любом месте, не сработало.
  • HTTP-доступ с моего доменного имени работает, что заставляет меня поверить, что это не проблема DNS.
  • Доступ по протоколу HTTPS работает с curl из экземпляра, поэтому конфигурация nginx выглядит для меня хорошо (при правильном доступе к журналам).
  • /var/log/nginx/access.log Не показывает никаких результатов, когда я нажимаю на свое доменное имя с помощью HTTPS.

Вот мои значения группы безопасности

 Port range    Protocol    Source                    Security groups
80            TCP         sg-03d37000000000000      MY_SECURITY_GROUP
All           All         0.0.0.0/0                 MY_SECURITY_GROUP
All           All         ::/0                      MY_SECURITY_GROUP
443           TCP         0.0.0.0/0                 MY_SECURITY_GROUP
  

Когда я нажимаю на экземпляр nginx в HTTPS

(небезопасно, потому что доменное имя сертификата не 127.0.0.1, результат API правильный)

 [ec2-user@ip-123-345-67-89 nginx]$ curl --insecure https://127.0.0.1
{"status":"ok","api":"sdk"}
  

Это то, что я получаю от Google Chrome при попытке получить доступ к веб-сайту
Google Chrome, показывая «Этот сайт недоступен»

Вот журналы из nginx access

 [ec2-user@ip-123-345-67-89 nginx]$ tail -f /var/log/nginx/access.log
AWS_IP    - - [01/Oct/2020:14:02:48  0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
MY_IP     - - [01/Oct/2020:14:02:50  0000] "GET / HTTP/1.1" 304 0  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ..." "123.345.67.89"
AWS_IP    - - [01/Oct/2020:14:02:57  0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
AWS_IP    - - [01/Oct/2020:14:03:03  0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
127.0.0.1 - - [01/Oct/2020:14:03:10  0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.61.1"                                         "-"
AWS_IP    - - [01/Oct/2020:14:03:12  0000] "GET / HTTP/1.1" 200 56 "-" "ELB-HealthChecker/2.0"                               "-"
  

Пока я считаю, что между моей конфигурацией AWS и экземпляром что-то не так, поскольку все работает на экземпляре.

Но конфигурация AWS мне нравится, поэтому у меня нет других идей о происхождении моей проблемы.

Любая помощь будет оценена. Большое спасибо за чтение всего этого.

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

1. Можете ли вы уточнить свои настройки? Я вижу, у вас есть ELB-HealthChecker , так что вы используете балансировщик нагрузки приложений? «Значения группы безопасности» предназначены для ALB или ваших экземпляров? Если у вас есть ALB, где вы развернули свой SSL-сертификат, на ALB или в инстансах?

2. Привет @Marcin, извините, я подумал single instance , что это достаточно ясно (я не эксперт в AWS). Я использую один экземпляр с Elastic Beanstalk. Таким образом, балансировщик нагрузки отсутствует, а сертификаты размещаются в экземпляре. В основном я следовал этому руководству: docs.aws.amazon.com/elasticbeanstalk/latest/dg /…

3. В ваших журналах отображаются записи из «ELB-HealthChecker / 2.0». Откуда он берется, если у вас нет балансировщика нагрузки?

4. Это было оно! спасибо, приятель. В моей среде Elastic Beanstalk в разделе Configuration > Capacity environment type была установлена балансировка нагрузки. Я изменил его на один экземпляр , и теперь он работает. Моя ошибка заключалась в том, что я предположил, что конфигурация Elastic Beanstalk будет такой же, как у PHP (что у меня было раньше) для Docker. Вы можете опубликовать это как ответ, чтобы я мог решить эту проблему.

5. Нет проблем и спасибо.

Ответ №1:

На основе комментариев.

Проблема была вызвана использованием среды EB с балансировкой нагрузки по ошибке, а не в одном экземпляре.

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

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

1. Как мы можем включить контейнер с поддержкой HTTPS в AWS ECS

2. @sks123245 Вы можете задать новый вопрос по этому поводу. Но, как правило, вам потребуется иметь самозаверяющие SSL-сертификаты и протокол HTTPS в настройках вашей целевой группы.