Proxy inverso de múltiples servicios HTTPS dockerizados diferentes

Proxy inverso de múltiples servicios HTTPS dockerizados diferentes

Tengo dos servicios, ambos perfectamente acoplados, cada uno con su propio docker-compose.yml.

Cada servicio tiene su propio nombre de dominio.

Ambos servicios utilizan HTTPS y tienen certificados Lets Encrypt.

Ambos servicios son completamente autónomos y escuchan en 80 y 443.

.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

¿Cómo configuro un proxy inverso para poder iniciar ambos servicios en el mismo host?

.--------------[http]-[https]--------------.
|                                          |
|              REVERSE PROXY               |
|                                          |
'---+--------+---------------+--------+----'
    |        |               |        |
   http     https           http     https
   req.     req.            req.     req.
   domainA  domainA         domainB  domainB
     |        |              |        |
     V        V              V        V
.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

Me gustaría mantener los servicios autónomos. Es decir, me gustaría evitar extraer los certificados de los contenedores de servicios.

Según mis experimentos, parece que nginx no puede reenviar solicitudes HTTPS sin los certificados, aunqueparececomo si fuera posible lograrlo. ¿Quizás con algún otro software de proxy inverso?

Tengo control sobre ambos servicios docker-compose.yml. Puedo cambiar puertos y demás si es necesario.

Idealmente, me gustaría encontrar un demonio simple que acepte una configuración similar a

[service a]
domain: domainA.tld
localPort: 8080

[service b]
domain: domainB.tld
localPort: 8081

He buscado como loco pero no he encontrado ninguna herramienta de este tipo.

Respuesta1

Podrías usar eljwilder/nginx-proxy, que ofrece una funcionalidad automatizada de proxy inverso y viene con una sencilla integración de Docker-Compose (solo necesita especificar un par de variables de entorno: los puertos donde se ejecuta el servicio y el dominio donde el servicio estará disponible).

También puede automatizar la generación de certificados Let's Encrypt conjrcs/letsencrypt-nginx-proxy-companion.

información relacionada