Рейтинг:0

Сервер отказался подключаться после установки SSL через Certbot | Докер + Nginx, AWS Lightsail

флаг it

Мне удалось установить SSL через certbot в мой контейнер Nginx Docker, но после установки весь трафик маршрутизируется через HTTPS отказывается подключаться.

завиток https://www.example.com или же завиток https://the_ip_of_server

curl: (7) Не удалось подключиться к порту 443 example.com через 9822 мс: соединение отклонено

~ Порт 443 открыт на сервере (AWS Lisghtsail)

завиток http://www.example.com

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.21.6</center>
</body>
</html>

но когда curl http://the_ip_of_server

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.21.6</center>
</body>
</html>


вот nginx.conf

#Ограничение параллелизма
limit_conn_zone $binary_remote_addr zone=per_ip:10m;

сервер {
имя_сервера example.com www.example.com;

место расположения / {
    прокси_пасс http://flask:8080/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Хост $host;
    прокси_перенаправление выключено;
    proxy_intercept_errors включен;

    limit_conn per_ip 12;
}

страница_ошибки 404 /notfound.html;
местоположение /notfound.html {
    корень /var/www/html;
    внутренний;
}

error_page 500 502 503 504 /maintenance.html;
расположение /maintenance.html {
    корень /var/www/html;
    внутренний;
}

слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

}


сервер {
если ($host = www.example.com) {
    вернуть 301 https://$host$request_uri;
} # управляется Certbot


если ($host = example.com) {
    вернуть 301 https://$host$request_uri;
} # управляется Certbot


слушать 80 default_server;
имя_сервера example.com www.example.com;
вернуть 404; # под управлением Certbot

}

докер-compose.yml

версия: '3.7'

Сервисы:

колба:
  сборка: приложение ./Flask
  имя_контейнера: колба
  перезапуск: всегда
  среда:
    - APP_NAME=окружение
  разоблачать:
    - 8080

нгинкс:
  сборка: ./Nginx
  имя_контейнера: nginx
  перезапуск: всегда
  порты:
    - "80:80"
Martin avatar
флаг kz
Пожалуйста, предоставьте дополнительную информацию ... У вас есть nginx, работающий вне докера в качестве обратного прокси-сервера, перенаправляющий трафик в ваш контейнер докера, верно? Вы пытались подключиться к ```http://flask:8080/``` с машины, на которой работает nginx? В логах nginx есть что-то интересное? Может быть, контейнер докеров вышел / разбился, вы это проверяли?
Pranav avatar
флаг it
Nginx работает в отдельном док-контейнере, в то время как фляга работает в другом, я попробовал `curl http://flask:8080/` из контейнера Nginx, и результат в порядке. и оба контейнера докеров работают нормально (без сбоев) в сети докеров.
Martin avatar
флаг kz
хорошо, вы думали опубликовать порт 443 контейнера nginx на хост?
Pranav avatar
флаг it
хм, порт 80 контейнера уже опубликован на порт 80 хоста. я не уверен, какой порт хоста должен быть назначен порту 443 контейнера! Я обновлю вопрос своим файлом `docker-compose`.
Martin avatar
флаг kz
порт 443 используется для трафика https, порт 80 используется только для незашифрованного трафика http. Добавьте в свой файл компоновки строку, аналогичную порту публикации 80: порт 443 контейнера nginx должен быть опубликован на порту 443 вашей хост-системы.
Pranav avatar
флаг it
Неа! тем не менее, в соединении отказано :( но `http://` отлично работает без SSL ofc.
Pranav avatar
флаг it
Ой, извини, приятель! это была моя вина, что я пересобрал `docker-compose`, в конечном итоге он воссоздал `nginx.conf`, поэтому я снова установил `certbot`, и теперь все в порядке! :)
Pranav avatar
флаг it
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/136213/discussion-between-pranav-and-martin).
Рейтинг:0
флаг it

Для того, чтобы маршрут https трафика, я должен был опубликовать порт 443 контейнера на порт 443 хоста (сервера).

Добавление - "443:443" в раздел nginx файла docker-compose должен решить эту проблему.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.