Proxy reverso de vários serviços HTTPS dockerizados diferentes

Proxy reverso de vários serviços HTTPS dockerizados diferentes

Eu tenho dois serviços, ambos bem encaixados, cada um com seu próprio arquivo docker-compose.yml.

Cada serviço tem seu próprio nome de domínio.

Ambos os serviços usam HTTPS e possuem certificados Lets Encrypt.

Ambos os serviços são totalmente independentes e escutam em 80 e 443.

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

Como configuro um proxy reverso para poder iniciar os dois serviços no mesmo 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     |
|                  |    |                  |
'------------------'    '------------------'

Eu gostaria de manter os serviços independentes. Ou seja, eu gostaria de evitar a extração dos certificados dos contêineres de serviço.

Pelas minhas experiências, parece que o nginx não pode encaminhar solicitações HTTPS sem os certificados, emboraparececomo deveria ser possível conseguir isso. Talvez com algum outro software de proxy reverso?

Eu tenho controle sobre ambos os serviços docker-compose.yml. Posso mudar de porta e assim por diante, se necessário.

Idealmente, eu gostaria de encontrar um daemon simples que aceitasse uma configuração parecida com

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

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

Eu procurei como um louco, mas não encontrei nenhuma ferramenta desse tipo.

Responder1

Você poderia usar ojwilder/nginx-proxy, que oferece funcionalidade automatizada de proxy reverso e vem com uma integração fácil do docker-compose (você só precisa especificar algumas variáveis ​​de ambiente: as portas onde o serviço está sendo executado e o domínio onde o serviço estará disponível).

Você também pode automatizar a geração do certificado Let's Encrypt comjrcs/letsencrypt-nginx-proxy-companion.

informação relacionada