Я настроил сертификат 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, чего-то не хватает. Как это исправить?


Где вы настроили 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 работает.