Порт Docker не работает через https после настройки SSL через ubuntu nginx

Я настроил сертификат Letsencrypt непосредственно на экземпляр AWS EC2 Ubuntu, на котором работает Nginx, и сервер докеров, использующий порт 9998. Домен настроен на Route 53. Http перенаправляется на https.

Таким образом, https://example.com работает нормально, но https://example.com:9998 получает ошибку ERR_SSL_PROTOCOL_ERROR. Если я использую IP-адрес, например, http://10.10.10.10:9997, он работает и проверяет сервер, используя порт 9998, все в порядке.

Снимок сервера в докере:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
999111000        img-server         "/bin/sh -c 'java -j…"   21 hours ago        Up 21 hours         0.0.0.0:9998->9998/tcp   hellowworld

Кажется, между Nginx и сервером, использующим порт 9998, чего-то не хватает. Как это исправить?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
384
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Где вы настроили ssl-сертификат? Только Нгинкс?

Причина, по которой вы не можете посетить https://example.com:9998 с использованием протокола ssl, заключается в том, что этот порт предоставляет службу http, а не https.

Предлагаю не публиковать 9998 hellowworld и проксировать весь трафик с помощью nginx (если Nginx тоже запущен с докером и в той же сети).

Настройте https в Nginx, и исходный сервер предоставит http.

Это конфигурация образецhttps://github.com/newnius/scripts/blob/master/nginx/config/conf.d/https.conf

server {
    listen      80;
    server_name example.com;
    return      301 https://example.com$request_uri;
}
server {
    listen      443;
    server_name example.com;

    access_log  logs/example.com/access.log  main;
    error_log   /var/log/nginx/debug.log debug;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass       http://apache:80;
        proxy_set_header Host $host;
        proxy_set_header CLIENT-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~ /.well-known {
        allow all;
        proxy_pass  http://apache:80;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store(Mac).
    location ~ /\. {
        deny all;
    }
}

SSL находится на Nginx, а не внутри Docker. Запутался в апач:80. Во-первых, это порт 80 или 9998. Поскольку сервис работает на порту 9998, значит, где-то он должен сообщить Nginx — запутался. Во-вторых, это apache:80 или 9998 или nginx:80? Насколько я знаю, Nginx работает.

elle 01.04.2019 07:15

Другие вопросы по теме