Estimated reading time: 16 Minuten
Stell dir vor, du hast dir ein fantastisches Home-Lab aufgebaut. Da läuft ein Home Assistant für dein Smart Home, eine Nextcloud für deine Daten, vielleicht ein Plex-Server für Medien und ein Pi-hole, um Werbung zu blockieren. Alle diese Dienste laufen wunderbar – aber sie haben ein riesiges Problem: Sie sind alle unter verschiedenen IP-Adressen oder, noch schlimmer, unter der gleichen IP-Adresse, aber mit wilden Portnummern wie :8123, :8080 oder :32400 erreichbar.
Und dann kommt der Moment, in dem du von unterwegs auf deine Nextcloud zugreifen willst. Was machst du? Ports im Router öffnen? Bitte nicht! Jeden einzelnen Port für jeden Dienst ins Internet zu hängen, ist ein Sicherheitsalbtraum. Außerdem kannst du dir unmöglich all diese Portnummern merken. Du willst nextcloud.deinedomain.de eingeben und fertig. Und natürlich soll das Ganze verschlüsselt sein, mit einem grünen Schloss in der Browserleiste (HTTPS).
Genau hier kommt der NGINX Proxy Manager (NPM) ins Spiel.
Er ist der „Türsteher“ für dein Netzwerk. Er nimmt Anfragen aus dem Internet an (auf den Standard-Ports 80 und 443), schaut sich an, welche Domain aufgerufen wurde (z. B. home.deinedomain.de), und leitet den Besucher intern an den richtigen Container und Port weiter. Das Beste daran? Du musst keine kryptischen Konfigurationsdateien in der Konsole bearbeiten. Der NGINX Proxy Manager bietet dir eine wunderschöne, grafische Oberfläche, um alles zu steuern.
In der Welt des Webhostings und Netzwerkmanagements ist ein Reverse Proxy eine Schlüsselkomponente zur Verbesserung der Leistung, Sicherheit und Skalierbarkeit von Webanwendungen. Der NGINX Proxy Manager ist ein leistungsstarkes Tool, das die Einrichtung und Verwaltung von NGINX als Reverse Proxy vereinfacht und es fast zum Kinderspiel macht. In diesem Beitrag zeige ich dir, wie du den NGINX Proxy Manager als Reverse Proxy einrichtest.
Was ist ein Reverse Proxy?
Erstmal klären wir, was ein Reverse Proxy überhaupt ist. Stell dir einen Reverse Proxy als Mittelsmann vor, der zwischen den Anfragen der Nutzer und den Servern deiner Anwendung steht. Er leitet Anfragen an die Server weiter und sendet die Antworten zurück an die Nutzer. Das bringt dir eine Menge Vorteile wie Lastverteilung, verbesserte Sicherheit und effiziente Caching-Mechanismen.

Wie hier dargestellt, kommuniziert der Reverse Proxy mit dem Internet und mit deinem Server inklusive der Services. Man kann sich das als Dolmetscher vorstellen. Eine Person versucht die Domain sascha-brockel.de über das Internet aufzurufen. Die Anfrage wird an den Hosting-Anbieter der Domain weitergeleitet, welcher wiederum auf eine IP-Adresse verweist, an der sich ein Server befindet.
Der Server wird aber eben nicht selbst angesprochen, da der Netzwerkverkehr in den meisten Fällen nur über die Ports 80 und 443 läuft. Mittlerweile fast nur noch Port 443, da eigentlich jede Seite https als Protokoll nutzt und damit gesichert ist. Da wir aber nur einen Service über einen Port freigeben können und der Port damit blockiert wäre, nutzen wir einen Reverse Proxy. Dieser nimmt alle Anfragen für den Port entgegen und enthält für das interne Netzwerk eine Mapping-Tabelle, die festlegt, wohin welche Anfrage weitergeleitet werden soll.
So können wir die Anfrage an sascha-brockel.de an den Docker-Container WordPress weiterleiten. Dasselbe gilt auch für den WordPress-Service, welcher nun weiß, wohin er die Antwort zurücksendet. Die Antwort läuft also wieder über den Reverse Proxy und zurück an das Internet an den Anfragenden.
Warum NGINX?
NGINX (ausgesprochen „Engine X“) ist einer der schnellsten und beliebtesten Webserver der Welt. Er ist extrem ressourcensparend und kann Tausende von gleichzeitigen Verbindungen handeln. Allerdings ist die Konfiguration von „rohem“ NGINX oft mühsam. Eine falsche Klammer in der nginx.conf und nichts geht mehr.
Warum NGINX Proxy Manager?
Die Entwickler hinter dem Projekt (siehe GitHub) haben erkannt, dass NGINX genial, aber kompliziert ist. Der NPM setzt eine benutzerfreundliche Weboberfläche (GUI) auf den NGINX-Server. Wenn du in der GUI klickst, schreibt das Tool im Hintergrund die komplexe NGINX-Konfiguration für dich.
Die Key-Features auf einen Blick:
- Wunderschönes UI: basierend auf Tabler, sehr übersichtlich.
- SSL-Management: Integrierte „Let’s Encrypt“-Unterstützung. Zertifikate werden automatisch erstellt und erneuert.
- Docker-Support: Läuft perfekt als Container.
- Access Lists: Schütze Dienste, die keine eigene Anmeldung haben, mit einem zusätzlichen Passwort oder beschränke den Zugriff auf bestimmte IP-Adressen.
- Mehrere User: Du kannst Admin- und eingeschränkte Benutzer anlegen.

Vorteile von NGINX Proxy Manager gegenüber normalen NGINX
1. Benutzerfreundliche Grafische Oberfläche (GUI)
- Einfachheit: Der größte Vorteil des NGINX Proxy Manager liegt in seiner benutzerfreundlichen grafischen Oberfläche. Während NGINX normalerweise über Konfigurationsdateien in der Befehlszeile verwaltet wird, bietet der NGINX Proxy Manager eine intuitive Web-Oberfläche.
- Zeitersparnis: Die GUI ermöglicht es dir, Proxy-Einstellungen schnell und effizient zu konfigurieren, ohne in Konfigurationsdateien graben zu müssen. Das spart Zeit, besonders für Nutzer, die weniger erfahren mit der Konfiguration von NGINX über die Kommandozeile sind.
- Geringere Komplexität: Ich spreche aus Erfahrung, wenn ich sage, wie frustrierend es ist, mit NGINX zu beginnen, wenn man noch nie eine Konfiguration geschrieben hat.
2. Einfache SSL/TLS-Zertifikatverwaltung
- Automatisierung: Der NGINX Proxy Manager vereinfacht das Handling von SSL/TLS-Zertifikaten enorm. Du kannst Let’s Encrypt-Zertifikate direkt über die GUI anfordern und automatisch erneuern lassen.
- Sicherheit: Dies erleichtert die Implementierung von HTTPS auf deinen Websites und fördert eine sicherere Webumgebung, die heutzutage quasi schon verpflichtend ist.
3. Zugangskontrolle und Authentifizierung
- Benutzerfreundliche Einrichtung: Im NGINX Proxy Manager kannst du einfach Zugangskontrollregeln und Authentifizierungsoptionen für deine Webanwendungen einrichten.
- Flexibilität: Es bietet eine höhere Flexibilität bei der Konfiguration von Zugriffsbeschränkungen, ohne dass du dich in die Tiefen komplexer NGINX-Konfigurationsdateien begeben musst.
4. Einfache Fehlerbehebung und Monitoring
- Zugriffsprotokolle: Der NGINX Proxy Manager bietet eine einfache Schnittstelle, um Zugriffs- und Fehlerprotokolle einzusehen. Das macht die Fehlerbehebung wesentlich einfacher als das manuelle Durchsuchen von Protokolldateien auf dem Server.
- Übersichtlichkeit: Die klare Darstellung von Konfigurationen und Protokollen in der GUI hilft bei der schnellen Identifizierung und Behebung von Problemen.
5. Unterstützung für Docker
- Docker-Integration: Der NGINX Proxy Manager ist als Docker-Container verfügbar, was die Installation und Skalierung auf verschiedenen Systemen erleichtert.
- Portabilität und Konsistenz: Durch die Nutzung von Docker kannst du eine konsistente Umgebung über verschiedene Entwicklungs-, Test- und Produktionsumgebungen hinweg sicherstellen.
6. Erweiterte Konfigurationsmöglichkeiten
- Benutzerdefinierte Header: Du kannst benutzerdefinierte HTTP-Header direkt über die GUI konfigurieren, was bei der Standard-NGINX-Version mehr technisches Wissen und manuelle Konfigurationsarbeit erfordert.
- Anpassungsfähigkeit: Der NGINX Proxy Manager bietet eine größere Flexibilität bei der Anpassung von Proxy-Einstellungen für spezifische Anforderungen.
Vorbereitung und Voraussetzungen
Damit wir starten können, benötigst du eine solide Basis.
1. Die Hardware
Der NGINX Proxy Manager ist sehr genügsam. Er läuft auf:
- Einem Raspberry Pi (3B+ oder 4/5 empfohlen).
- Einem alten Laptop/PC mit Linux.
- Einem VPS (Virtual Private Server) bei Anbietern wie Hetzner, Netcup oder DigitalOcean.
- Einem NAS (Synology, QNAP), sofern Docker unterstützt wird.
2. Die Software
Wir gehen davon aus, dass du ein Linux-System (z. B. Ubuntu, Debian oder Raspberry Pi OS) verwendest. Docker und Docker Compose müssen installiert sein.
Falls noch nicht geschehen, installiere Docker mit diesen Befehlen:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
(Logge dich danach einmal aus und wieder ein).
3. Domains und DNS
Das ist der wichtigste Punkt, den viele vergessen: Du brauchst eine Domain (z. B. meinedomain.de) oder zumindest eine DynDNS-Adresse (wie meinserver.duckdns.org).
Damit der Proxy Manager funktioniert, müssen die Ports 80 (HTTP) und 443 (HTTPS) an deinem Router auf die IP-Adresse des Geräts weitergeleitet werden, auf dem der Proxy Manager laufen wird.
- Port Forwarding: Router -> Port 80 an Server-IP Port 80.
- Port Forwarding: Router -> Port 443 an Server-IP Port 443.
Installation des NGINX Proxy Managers
- Erstellen einer Docker-Compose-Datei: Fang mit einer Docker-Compose-Datei für den NGINX Proxy Manager an. Hier definierst du, wie Docker die nötigen Container aufbaut. Hier ist ein Beispiel für deine
docker-compose.yml-Datei:
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
networks:
- sascha
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
environment:
TZ: Europe/Berlin
X_FRAME_OPTIONS: SAMEORIGIN
volumes:
- /mnt/cache/appdata/network/nginx-proxy-manager/data:/data
- /mnt/cache/appdata/network/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
healthcheck:
test: /bin/check-health
interval: 1m
timeout: 3s
retries: "2"
networks:
sascha:
external: true
- Container starten: Jetzt startest du die Container mit
docker-compose up -d. Docker lädt nun das Image herunter und startet den Dienst. Das kann beim ersten Mal ein paar Minuten dauern. Der NGINX Proxy Manager sollte jetzt auf deinem Server laufen.
Wichtige Hinweise zur Konfiguration:
- Datenbank: In diesem Beispiel nutzen wir die integrierte SQLite-Datenbank. Das reicht für 99% der Heimanwender völlig aus. Wenn du eine riesige Umgebung betreibst, kannst du auch eine separate MariaDB/MySQL-Datenbank anbinden (siehe GitHub-Doku), aber für den Start ist das Overkill.
- Ports: Port 81 ist der Verwaltungsport. Diesen solltest du nicht im Router freigeben! Er ist nur für dich im lokalen Netzwerk (LAN) gedacht.
Netzwerk und Erreichbarkeit
- Ports: Der Container öffnet drei wichtige Zugänge: Port 80 für normalen Web-Traffic (HTTP), Port 443 für verschlüsselten Traffic (HTTPS) und Port 81 für die grafische Administrationsoberfläche im Browser.
- Netzwerk: Er wird in das bestehende Netzwerk sascha eingebunden, um Anfragen direkt an andere Container in diesem Netzwerk weiterleiten zu können.
Konfiguration und Sicherheit
- Umgebung: Die Zeitzone ist auf Berlin eingestellt. Zudem ist ein Sicherheits-Header aktiviert, der verhindert, dass die Weboberfläche in fremden Frames eingebettet wird (Schutz gegen Clickjacking).
- Gesundheitscheck: Das System prüft jede Minute automatisch, ob der Dienst noch ordnungsgemäß läuft. Schlägt dieser Test zweimal hintereinander fehl, wird der Container als „unhealthy“ markiert.
Datenspeicherung
Damit deine Konfigurationen und die erstellten SSL-Zertifikate (z. B. von Let’s Encrypt) dauerhaft erhalten bleiben, werden zwei Verzeichnisse von deinem Host-System direkt in den Container gespiegelt. So bleiben alle Einstellungen auch nach Updates des Containers bestehen.
Der erste Start & Grundeinrichtung
Sobald der Container läuft (prüfe das mit docker ps), kannst du auf die Oberfläche zugreifen.
- Öffne deinen Browser.
- Navigiere zu
http://<IP-DEINES-SERVERS>:81.- Beispiel:
http://192.168.178.50:81
- Beispiel:
Du solltest nun den Login-Screen sehen. Die Standard-Zugangsdaten sind:
- Email:
[email protected] - Password:
changeme
Achtung: Sofort nach dem ersten Login wirst du aufgefordert, diese Daten zu ändern. Tu das bitte! Wähle ein starkes Passwort und gib eine echte E-Mail-Adresse an. Diese E-Mail wird später für Let’s Encrypt Benachrichtigungen (z.B. ablaufende Zertifikate) genutzt.
Deinen ersten (öffentlichen) Service veröffentlichen
Jetzt kommt der spaßige Teil. Wir gehen davon aus, du hast einen Dienst (z. B. Portainer oder Nextcloud) auf deinem Server laufen, der unter http://192.168.178.50:9000 erreichbar ist. Du möchtest ihn unter portainer.meinedomain.de erreichen.
Schritt 1: DNS-Eintrag setzen
Gehe zu deinem Domain-Provider (Strato, Cloudflare, Namecheap, etc.) und erstelle einen A-Record (für IPv4) oder AAAA-Record (für IPv6).
- Host/Subdomain:
portainer - Ziel/Value: Deine öffentliche WAN-IP-Adresse (zuhause).
Tipp: Wenn du eine dynamische IP zuhause hast, richte einen CNAME-Record ein, der auf deine DynDNS-Adresse zeigt.
Schritt 2: Proxy Host anlegen
Gehe im NGINX Proxy Manager Dashboard auf Hosts -> Proxy Hosts und klicke oben rechts auf Add Proxy Host.
Ein Fenster öffnet sich mit mehreren Tabs. Hier ist die Magie:
Tab: Details
- Domain Names: Hier trägst du
portainer.meinedomain.deein. DrückeEnter, damit der Chip erstellt wird. - Scheme: Meistens
http(da die Kommunikation intern zwischen Proxy und Dienst oft unverschlüsselt ist). - Forward Hostname / IP: Hier muss die IP-Adresse des Ziel-Dienstes rein.
- Pro-Tipp: Wenn der Ziel-Container im selben Docker-Netzwerk wie der NPM ist, kannst du den Container-Namen verwenden.
- Standard: Trage die lokale IP deines Servers ein (z. B.
192.168.178.50). Trage nicht127.0.0.1oderlocalhostein, da sich das auf den Container selbst beziehen würde!
- Forward Port: Der Port des Dienstes, z. B.
9000. - Cache Assets / Block Common Exploits: Kannst du meistens aktivieren (verbessert Performance und Sicherheit etwas).
- Websockets Support: Aktiviere das unbedingt für Dienste wie Home Assistant oder Portainer, die Live-Updates benötigen.
Tab: SSL (Die Verschlüsselung)
Klicke noch nicht auf „Save“. Wechsle zum Tab „SSL“.
- SSL Certificate: Wähle „Request a new SSL Certificate“.
- Force SSL: Aktiviere dies. Es zwingt Besucher, HTTPS zu nutzen. Wenn jemand
http://...eingibt, wird er automatisch aufhttps://...umgeleitet. - HTTP/2 Support: Aktivieren (macht die Seite schneller).
- Email Address for Let’s Encrypt: Sollte bereits vorausgefüllt sein.
- I Agree to the Terms: Haken setzen.
Jetzt klicke auf Save.
Was passiert jetzt?
- Der NPM kontaktiert Let’s Encrypt.
- Let’s Encrypt prüft, ob deine Domain wirklich auf deinen Server zeigt (deshalb mussten wir Port 80 öffnen!).
- Wenn alles passt, wird das Zertifikat heruntergeladen, installiert und der Proxy aktiviert.
Nach wenigen Sekunden solltest du in der Liste „Online“ sehen. Rufe deine Domain auf – du solltest das Schloss-Symbol sehen!
Einrichten eines lokalen Reverse-Proxy-Hosts
Im Prinzip machst du dasselbe wie bei einem öffentlichen Host, aber er muss woanders hinzeigen. Angenommen, du nutzt DuckDNS, wie im unten verlinkten Video gezeigt, dann musst du dort die IP-Adresse deines Servers hinterlegen, um die Domains lokal aufzulösen. Dann kannst du ein SSL-Zertifikat für deine DuckDNS-Adresse und eine Wildcard-Adresse also bspw. saschatest.duckdns.org und *.saschatest.duckdns.org erstellen lassen und lokal dann Proxy Hosts mit dieser Domain nutzen.
- Proxy Host hinzufügen: In der Oberfläche des NGINX Proxy Managers gehst du zu „Hosts“ und dann zu „Proxy Hosts“. Hier klickst du auf „Add Proxy Host“.
- Details eingeben: Trage deine Domain ein, die du umleiten möchtest, und die IP-Adresse und den Port des internen Dienstes, den du durch den Proxy leiten willst.
- SSL-Zertifikat konfigurieren: Du kannst dich für Let’s Encrypt für ein kostenloses SSL-Zertifikat entscheiden oder ein vorhandenes Zertifikat nutzen.
- Änderungen speichern: Speichere deine Einstellungen, und der NGINX Proxy Manager wird den Verkehr zu deiner Anwendung sofort umleiten. Es gibt einen Hot-Reload, der kein Neustarten nötig macht.
Fortgeschrittene Funktionen
Der NGINX Proxy Manager kann mehr als nur einfache Weiterleitungen.
1. Access Lists (Zusätzlicher Passwortschutz)
Manche Dienste haben gar keinen Login oder nur einen schwachen. Oder du willst dein Admin-Dashboard gar nicht erst öffentlich zeigen, ohne eine zweite Hürde. Man kann und sollte Access Lists bei internen Services auch nutzen, um sich doppelt abzusichern und wie im Video gezeigt nur Geräten aus dem lokalen Netzwerk den Zugriff zu erlauben.
- Gehe zu Access Lists -> Add Access List.
- Gib der Liste einen Namen (z. B. „Admin-Only“).
- Im Tab „Authorization“ kannst du Usernamen und Passwörter anlegen.
- Gehe zurück zu deinem Proxy Host, bearbeite ihn und wähle im Tab „Details“ unter „Access List“ deine neue Liste aus.
- Ergebnis: Bevor die Seite lädt, fragt der Browser nun nach Benutzername und Passwort.
2. Redirection Hosts
Manchmal willst du einfach nur eine Domain auf eine andere umleiten. Beispiel: www.meinedomain.de soll auf meinedomain.de leiten. Oder shop.meinedomain.de auf deinen Etsy-Shop. Das geht unter Hosts -> Redirection Hosts. Einfach Quelle und Ziel eingeben, Statuscode wählen (meist 301 für permanent) und fertig.
3. 404 Hosts (Default Site)
Was passiert, wenn jemand deine IP-Adresse direkt aufruft oder eine Subdomain, die du nicht konfiguriert hast? Standardmäßig zeigt NGINX eine „Congratulations“-Seite. Das verrät aber, dass da ein Server läuft. Unter Settings -> Default Site kannst du einstellen, was passieren soll. Am besten: „404 Page“ oder einfach „Redirect“ auf https://www.google.com/search?q=Google.com. So gibst du Angreifern weniger Infos.
4. Custom Nginx Configuration
Für die absoluten Profis: In jedem Proxy Host gibt es den Tab Advanced. Hier kannst du reine NGINX-Config-Snippets einfügen. Das brauchst du z. B. für Nextcloud oft, um spezifische Header für CalDAV/CardDAV zu setzen (location /.well-known/carddav { ... }). Das macht den NPM extrem flexibel, ohne dass du Dateien per SSH bearbeiten musst.
Troubleshooting und häufige Fehler
Auch beim besten Tool läuft mal was schief. Hier sind die Klassiker:
„Internal Error“ beim Erstellen des Zertifikats
- Ursache: Meistens ist Port 80 am Router nicht offen oder die DNS-Einstellungen sind noch nicht weltweit aktualisiert (DNS-Propagation kann bis zu 24 Std dauern, geht meist aber in Minuten).
- Lösung: Prüfe, ob du von extern deine IP auf Port 80 erreichst.
502 Bad Gateway Fehler
- Ursache: Der Proxy läuft, aber er kann den internen Dienst nicht erreichen.
- Lösung: IP-Adresse und Port beim „Forward Host“ prüfen. Läuft der Ziel-Container? Sind sie im selben Netzwerk? Wenn du Docker-Netzwerknamen nutzt, stelle sicher, dass beide Container im selben
docker networksind.
504 Gateway Time-out Fehler
- Ursache: Der Ziel-Server braucht zu lange zum Antworten.
- Lösung: Entweder ist der Server überlastet oder abgestürzt.
Sicherheitstipps
Der NGINX Proxy Manager ist das Tor zu deinem Netzwerk. Halte es sicher!
- Starkes Passwort für den Admin: Das Standardpasswort
changemeist tabu! - Port 81 niemals freigeben: Das Admin-Interface gehört ins LAN oder sollte nur via VPN erreichbar sein.
- Updates: Aktualisiere den Docker-Container regelmäßig (
docker compose pull && docker compose up -d). - Fail2Ban (Optional): Fortgeschrittene Nutzer können Fail2Ban auf dem Host-System installieren und die Logs des NGINX Proxy Managers überwachen, um IPs zu bannen, die zu oft falsche Passwörter eingeben.
Umsetzung im YouTube-Video
Fazit
Der NGINX Proxy Manager ist eines dieser Tools, bei denen man sich fragt: „Wie habe ich das früher ohne gemacht?“ Er nimmt der komplexen Server-Verwaltung den Schrecken. Anstatt dich mit Zertifikats-Erneuerungen (Cronjobs für Certbot) und kryptischen Config-Dateien herumzuschlagen, klickst du dir deine Infrastruktur zusammen.
Er ist die perfekte Brücke zwischen professioneller IT-Technik und Heimanwender-Freundlichkeit. Egal ob du nur einen kleinen Blog hostest oder ein massives Home-Lab betreibst – der NPM skaliert mit deinen Anforderungen. Die Kombination aus Docker, Let’s Encrypt Automation und der einfachen GUI macht ihn zum unverzichtbaren Standard-Tool für jeden Self-Host-Enthusiasten.
Starte noch heute, räume dein Port-Chaos auf und gib deinen Diensten die professionellen HTTPS-Adressen, die sie verdienen!
Nützliche Links auf einen Blick
- Let’s Encrypt: letsencrypt.org
- Offizielle Website: nginxproxymanager.com
- GitHub Repository: github.com/NginxProxyManager/nginx-proxy-manager
- Docker-Dokumentation: docs.docker.com
0 Kommentare