
Quero servir vários sites no meu servidor. Cada site que suponho ser agrupado como docker-compose build, cada um tem seu próprio nginx, que escuta uma única porta
Eu tenho um site com nome de host site1.com. O docker compose expõe a porta 81:
...
services:
web:
image: nginx
...
ports:
- '81:443'
...
...
E o cliente nginx (dentro do container) escuta tudo no 443 e tem todas as configurações de SSL
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/fullchain1.pem;
ssl_certificate_key /etc/letsencrypt/privkey1.pem;
# ...
# and everything else
}
E aqui está o host nginx, que está passando da porta 80 para 81 de acordo com server_name:
server {
listen 80;
listen [::]:80;
server_name site1.com;
location / {
proxy_pass https://localhost:81;
}
}
Por enquanto está funcionando. Mas é inseguro. Então tento adicionar encaminhamento 443.
server {
listen 443;
listen [::]:443;
server_name bederdinov.me;
location / {
proxy_pass https://localhost:81;
}
}
Nginx reinicia bem, mas quando vou https://site1.com
estou recebendo umERR_SSL_PROTOCOL_ERROR
Parece bastante óbvio - o host nginx está tentando atender a solicitação com SSL, mas apenas o cliente docker nginx sabe como fazer isso
Como posso dizer ao host nginx que ele não precisa fazer nada, apenas passar todo o trabalho para o cliente nginx? Ou talvez haja outro software de servidor que eu possa usar para esta tarefa?
Responder1
A terminação SSL é tratada pelo nginx fora do contêiner. Você precisa configurar as opções de SSL lá. Não há necessidade de configurar SSL dentro do contêiner, desde que ele seja executado no mesmo host que o proxy reverso.