Reverse-Proxying mehrerer verschiedener, dockerisierter HTTPS-Dienste

Reverse-Proxying mehrerer verschiedener, dockerisierter HTTPS-Dienste

Ich habe zwei Dienste, beide ordentlich angedockt, jeder mit seinem eigenen docker-compose.yml.

Jeder Dienst hat seinen eigenen Domänennamen.

Beide Dienste verwenden HTTPS und verfügen über Lets Encrypt-Zertifikate.

Beide Dienste sind vollständig in sich geschlossen und hören auf 80 und 443.

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

Wie richte ich einen Reverse-Proxy ein, damit ich beide Dienste auf demselben Host starten kann?

.--------------[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     |
|                  |    |                  |
'------------------'    '------------------'

Ich möchte die Dienste in sich geschlossen halten. Das heißt, ich möchte das Extrahieren der Zertifikate aus den Dienstcontainern vermeiden.

Aus meinen Experimenten geht hervor, dass nginx HTTPS-Anfragen ohne die Zertifikate nicht weiterleiten kann, obwohles scheintals ob das möglich sein sollte. Vielleicht mit einer anderen Reverse-Proxy-Software?

Ich habe die Kontrolle über beide Dienste docker-compose.yml. Ich kann bei Bedarf die Ports usw. ändern.

Idealerweise würde ich gerne einen einfachen Daemon finden, der eine Konfiguration akzeptiert, die ungefähr so ​​aussieht

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

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

Ich habe wie verrückt gesucht, aber kein solches Tool gefunden.

Antwort1

Sie können diejwilder/nginx-proxy, das eine automatisierte Reverse-Proxy-Funktionalität bietet und mit einer einfachen Docker-Compose-Integration ausgestattet ist (Sie müssen nur ein paar Umgebungsvariablen angeben: die Ports, auf denen der Dienst ausgeführt wird, und die Domäne, in der der Dienst verfügbar sein wird).

Sie können die Generierung des Let's Encrypt-Zertifikats auch automatisieren mitjrcs/letsencrypt-nginx-proxy-companion.

verwandte Informationen