Как подключить nginx + proxy_pass к контейнеру Docker с помощью SSL?

Как подключить nginx + proxy_pass к контейнеру Docker с помощью SSL?

Я хочу обслуживать несколько сайтов на своем сервере. Каждый сайт я предполагаю обернуть как docker-compose build, у каждого есть свой nginx, который слушает один порт

У меня есть сайт с именем хоста site1.com. Его docker compose выставляет порт 81:

...
services:
  web:
    image: nginx
    ...
    ports:
      - '81:443'
    ...
...

А клиент nginx (внутри контейнера) слушает все на 443 и имеет все настройки ssl

server {
        listen 443 ssl;

        ssl_certificate /etc/letsencrypt/fullchain1.pem;
        ssl_certificate_key /etc/letsencrypt/privkey1.pem;
    
        # ...
        # and everything else
}

А вот хост nginx, который просто переходит с порта 80 на 81 согласно server_name:

server {
        listen 80;
        listen [::]:80;

        server_name site1.com;

        location / {
                proxy_pass https://localhost:81;
        }
}

Пока работает. Но небезопасно. Поэтому я пробую добавить пересылку 443.

server {
        listen 443;
        listen [::]:443;
        server_name bederdinov.me;

        location / {
                proxy_pass https://localhost:81;
        }
}

Nginx перезапускается нормально, но когда я захожу, https://site1.comя получаюERR_SSL_PROTOCOL_ERROR

Кажется, это совершенно очевидно - хост nginx пытается обслужить запрос с помощью ssl, но только клиент docker nginx знает, как это сделать.

Как мне сказать хостовому nginx, что ему не нужно ничего делать, а только передать всю работу клиентскому nginx? Или, может быть, есть другое серверное ПО, которое я могу использовать для этой задачи?

решение1

SSL-терминация обрабатывается nginx вне контейнера. Вам нужно настроить параметры SSL там. Нет необходимости настраивать SSL внутри контейнера, пока он работает на том же хосте, что и обратный прокси.

Связанный контент