Zurück zur Übersicht
Selfhosting Artikel 05 von 08

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.

Hinweis

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:

sudo apt update sudo apt install nginx sudo systemctl enable nginx sudo systemctl start nginx

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:

server { listen 443 ssl; server_name n8n.meinserver.de; ssl_certificate /etc/letsencrypt/live/n8n.meinserver.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/n8n.meinserver.de/privkey.pem; location / { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 80; server_name n8n.meinserver.de; return 301 https://$host$request_uri; }

Die Datei aktivierst du mit einem Symlink und testest die Konfiguration:

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx

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:

# /etc/nginx/sites-available/openwebui server { listen 443 ssl; server_name chat.meinserver.de; ssl_certificate /etc/letsencrypt/live/chat.meinserver.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/chat.meinserver.de/privkey.pem; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 80; server_name chat.meinserver.de; return 301 https://$host$request_uri; }

Die Upgrade und Connection Header sind wichtig für WebSocket-Verbindungen, die viele moderne Webanwendungen verwenden.

Wichtige Nginx-Befehle

nginx -t Prüft die Konfiguration auf Syntaxfehler. Immer vor reload ausführen.
systemctl reload nginx Lädt die Konfiguration neu ohne den Dienst zu unterbrechen.
systemctl restart nginx Startet Nginx komplett neu. Kurze Unterbrechung aller Verbindungen.
tail -f /var/log/nginx/error.log Zeigt Fehlermeldungen live an. Erste Anlaufstelle wenn etwas nicht funktioniert.
Nächster Schritt

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.

Der nächste sinnvolle Schritt

Wenn du diesen Teil verstanden hast, passen diese Seiten als Nächstes:

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.