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.