
Я хочу обслуживать несколько сайтов на своем сервере. Каждый сайт я предполагаю обернуть как 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 внутри контейнера, пока он работает на том же хосте, что и обратный прокси.