
Ich möchte mehrere Websites auf meinem Server bereitstellen. Jede Website soll als Docker-Compose-Build verpackt werden, jede hat ihren eigenen Nginx, der auf einem einzigen Port lauscht.
Ich habe eine Site mit dem Hostnamen site1.com. Ihr Docker Compose stellt Port 81 bereit:
...
services:
web:
image: nginx
...
ports:
- '81:443'
...
...
Und der Client nginx (im Container) hört alles auf 443 und hat alle SSL-Einstellungen
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/fullchain1.pem;
ssl_certificate_key /etc/letsencrypt/privkey1.pem;
# ...
# and everything else
}
Und hier ist der Host nginx, der gemäß Servername gerade von Port 80 zu 81 wechselt:
server {
listen 80;
listen [::]:80;
server_name site1.com;
location / {
proxy_pass https://localhost:81;
}
}
Im Moment funktioniert es. Aber es ist unsicher. Also versuche ich, eine 443-Weiterleitung hinzuzufügen.
server {
listen 443;
listen [::]:443;
server_name bederdinov.me;
location / {
proxy_pass https://localhost:81;
}
}
Nginx startet gut neu, aber wenn ich gehe, https://site1.com
bekomme ich eineERR_SSL_PROTOCOL_ERROR
Es scheint ziemlich offensichtlich - Host nginx versucht, Anfragen mit SSL zu bedienen, aber nur Docker-Client nginx weiß, wie das geht
Wie kann ich dem Host-Nginx sagen, dass er nichts tun muss, sondern nur die ganze Arbeit an den Client-Nginx weiterleiten soll? Oder gibt es vielleicht eine andere Serversoftware, die ich für diese Aufgabe verwenden kann?
Antwort1
Die SSL-Terminierung wird von nginx außerhalb des Containers gehandhabt. Sie müssen die SSL-Optionen dort konfigurieren. Es ist nicht erforderlich, SSL innerhalb des Containers zu konfigurieren, solange dieser auf demselben Host wie der Reverse-Proxy ausgeführt wird.