¿Cómo nginx + proxy_pass al contenedor Docker con SSL?

¿Cómo nginx + proxy_pass al contenedor Docker con SSL?

Quiero servir varios sitios en mi servidor. Supongo que cada sitio debe empaquetarse como compilación de Docker-Compose, cada uno tiene su propio nginx, que escucha un solo puerto.

Tengo un sitio con nombre de host site1.com. Su Docker Compose expone el puerto 81:

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

Y el cliente nginx (dentro del contenedor) escucha todo en 443 y tiene todas las configuraciones SSL

server {
        listen 443 ssl;

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

Y aquí está el host nginx, que simplemente pasa del puerto 80 al 81 según nombre_servidor:

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

        server_name site1.com;

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

Por ahora está funcionando. Pero es inseguro. Entonces intento agregar el reenvío 443.

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

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

Nginx se reinicia bien, pero cuando entro https://site1.comobtengo unERR_SSL_PROTOCOL_ERROR

Parece bastante obvio: el host nginx está intentando atender la solicitud con SSL, pero solo el cliente Docker nginx sabe cómo hacerlo.

¿Cómo puedo decirle al host nginx que no tiene que hacer nada más que pasar todo el trabajo al cliente nginx? ¿O tal vez exista otro software de servidor que pueda utilizar para esta tarea?

Respuesta1

La terminación SSL la maneja nginx fuera del contenedor. Debe configurar las opciones SSL allí. No es necesario configurar SSL dentro del contenedor siempre que se ejecute en el mismo host que el proxy inverso.

información relacionada