Reverse Proxy und Domains
Mehrere Dienste unter einem Dach: wie Nginx eingehende Anfragen an den richtigen Container weiterleitet und warum das unverzichtbar ist.
Hier richtest du Reverse Proxy und Domains ein, damit mehrere Selfhosting-Dienste sauber erreichbar werden. Du hast Docker installiert und mehrere Dienste laufen auf verschiedenen Ports: n8n auf 5678, Open WebUI auf 3000, Nextcloud auf 8080. Von außen erreichbar ist aber nur eine IP-Adresse. Wie kommt die Anfrage zum richtigen Dienst?
Das ist die Aufgabe eines Reverse Proxy. Nginx nimmt alle eingehenden Anfragen auf Port 80 und 443 entgegen und leitet sie je nach Domain an den richtigen Container weiter. Nach außen sieht alles sauber aus, intern läuft jeder Dienst auf seinem eigenen Port.
Warum ein Reverse Proxy
Ohne Reverse Proxy müsstest du jeden Dienst mit Portnummer aufrufen: http://meinserver.de:5678. Das ist umständlich, schwer zu merken und lässt sich nicht mit HTTPS-Zertifikaten absichern.
Mit Nginx sieht die Adresse sauber aus: https://n8n.meinserver.de. Der Reverse Proxy kümmert sich um die SSL-Terminierung, leitet die Anfrage intern weiter und gibt die Antwort zurück. Die Dienste selbst müssen sich um HTTPS nicht kümmern.
Dieser Artikel ist vor allem für den Betrieb auf einem vServer relevant, der von außen erreichbar sein soll. Für lokale Dienste die nur im Heimnetz genutzt werden braucht man keinen Reverse Proxy.
Nginx installieren
Auf Ubuntu und Linux Mint:
Mit sudo systemctl status nginx prüfst du ob der Dienst läuft. Wenn du jetzt die IP-Adresse des Servers im Browser aufrufst, erscheint die Nginx-Willkommensseite.
Einen Dienst weiterleiten
Für jeden Dienst legst du eine eigene Konfigurationsdatei in /etc/nginx/sites-available/ an. Hier ein Beispiel für n8n das auf Port 5678 läuft, mit HTTPS auf Port 443 und einer Weiterleitung von Port 80:
Die Datei aktivierst du mit einem Symlink und testest die Konfiguration:
nginx -t prüft die Syntax. Erst wenn der Test erfolgreich ist, Nginx neu laden.
Mehrere Dienste einrichten
Für jeden weiteren Dienst legst du eine eigene Datei an. Die Struktur ist immer gleich, nur server_name, proxy_pass und die Zertifikatspfade ändern sich:
Die Upgrade und Connection Header sind wichtig für WebSocket-Verbindungen, die viele moderne Webanwendungen verwenden.
Wichtige Nginx-Befehle
reload ausführen.
Die Zertifikatspfade in den Beispielen werden von Certbot automatisch angelegt. Im nächsten Artikel richten wir Let's Encrypt ein: Certbot holt die Zertifikate, trägt die Pfade in die Nginx-Konfiguration ein und richtet die automatische Erneuerung ein.
Häufige Fragen
Was macht ein Reverse Proxy?
Er nimmt Anfragen auf einer Domain entgegen und leitet sie intern an den richtigen Dienst und Port weiter.
Warum nicht jeden Dienst direkt per Port öffnen?
Viele offene Ports sind unübersichtlich und riskanter. Domains plus Reverse Proxy sind sauberer zu betreiben.
Welche Rolle spielt DNS?
DNS zeigt deine Domain auf die Server-IP. Der Reverse Proxy entscheidet danach, welcher Dienst angesprochen wird.