Nginx Proxy Manager: Reverse Proxy mit Web-GUI
Wer mehrere Dienste im Heimnetz oder auf einem Server betreibt, steht schnell vor dem Problem: Jeder Dienst läuft auf einem anderen Port. http://192.168.1.10:8080 für einen Dienst, :9000 für den nächsten – das ist schwer zu merken und nicht sauber erreichbar von außen.
Nginx Proxy Manager (NPM) löst das: Er leitet Anfragen anhand der Domain auf den richtigen Dienst weiter und stellt automatisch SSL-Zertifikate via Let's Encrypt aus.
Was ist ein Reverse Proxy?
Ein Reverse Proxy sitzt vor deinen Diensten und nimmt Anfragen entgegen. Der Client sieht nur den Proxy – welcher Dienst dahinter steckt, ist ihm egal.
Internet / lokales Netz
│
▼
Nginx Proxy Manager ←── Port 80/443
│
├── portainer.deinedomain.de → 192.168.1.10:9443
├── pihole.deinedomain.de → 192.168.1.10:80
└── adguard.deinedomain.de → 192.168.1.10:3000
Warum Nginx Proxy Manager?
- Web-GUI statt manueller nginx-Konfiguration
- Automatische SSL-Zertifikate via Let's Encrypt (auch Wildcard)
- Access Lists – Dienste mit Passwort oder IP-Whitelist schützen
- Einfache Weiterleitung mit wenigen Klicks
- Basiert auf dem bewährten nginx
Voraussetzungen
- Docker und Docker Compose installiert
- Port 80 und 443 auf dem Host müssen frei sein
- Für Let's Encrypt: eine öffentlich erreichbare Domain (oder lokale Zertifikate für interne Nutzung)
Installation mit Docker Compose
mkdir ~/npm && cd ~/npm
# docker-compose.yml
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: npm
ports:
- "80:80"
- "443:443"
- "81:81" # Admin-Interface
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
restart: unless-stopped
docker compose up -d
Das Admin-Interface ist unter http://<IP>:81 erreichbar.
Standard-Zugangsdaten:
| Feld | Wert |
|------|------|
| E-Mail | admin@example.com |
| Passwort | changeme |
Nach dem ersten Login werden E-Mail und Passwort geändert.
Ersten Proxy Host anlegen
- Im Dashboard auf Proxy Hosts → Add Proxy Host klicken
- Domain Names – die Domain/Subdomain eingeben, z.B.
portainer.zuhause.local - Forward Hostname / IP – IP des Zieldienstes, z.B.
192.168.1.10 - Forward Port – Port des Zieldienstes, z.B.
9443 - Scheme –
httpsfalls der Zieldienst HTTPS nutzt, sonsthttp - Optionen:
- Block Common Exploits – immer aktivieren
- Websockets Support – bei Bedarf (z.B. für Portainer)
- Speichern
SSL-Zertifikat einrichten (Let's Encrypt)
Für öffentlich erreichbare Domains stellt NPM automatisch Let's Encrypt-Zertifikate aus:
- Beim Anlegen des Proxy Hosts den Reiter SSL öffnen
- Request a new SSL Certificate auswählen
- Force SSL und HTTP/2 Support aktivieren
- E-Mail-Adresse eingeben
- I Agree to the Let's Encrypt Terms of Service bestätigen
- Speichern
NPM kümmert sich automatisch um die Erneuerung der Zertifikate.
Wildcard-Zertifikat (DNS-Challenge)
Für interne Dienste (nicht öffentlich erreichbar) kann ein Wildcard-Zertifikat über DNS-Challenge ausgestellt werden. Dafür muss der DNS-Anbieter eine API unterstützen (Cloudflare, Namecheap etc.). Die Konfiguration erfolgt unter SSL Certificates → Add SSL Certificate → Let's Encrypt → DNS Challenge.
Access Lists – Dienste schützen
Nicht alle Dienste sollen öffentlich erreichbar sein. Unter Access Lists lassen sich Listen mit erlaubten IPs oder HTTP Basic Auth anlegen:
- Access Lists → Add Access List
- Name vergeben, z.B. "Nur lokales Netz"
- Unter Allow die erlaubten IP-Bereiche eintragen:
192.168.1.0/24 - Beim Proxy Host unter Access List die erstellte Liste auswählen
Tipps für den Homelab-Betrieb
Lokale Domains
Für lokale Dienste ohne öffentliche Domain kann man .local-Subdomains nutzen und diese in Pi-hole oder AdGuard Home mit lokalen DNS-Einträgen auflösen:
- DNS-Eintrag in Pi-hole:
portainer.home→192.168.1.10 - NPM Proxy Host:
portainer.home→192.168.1.10:9443
NPM im gleichen Netzwerk wie andere Container
Wenn NPM und Zieldienste im gleichen Docker-Netzwerk laufen, kann statt der IP der Container-Name verwendet werden:
services:
nginx-proxy-manager:
networks:
- proxy
portainer:
networks:
- proxy
networks:
proxy:
external: true
Im Proxy Host dann als Forward Hostname den Container-Namen eintragen: portainer.
Fazit
Nginx Proxy Manager macht Reverse-Proxy-Konfiguration zugänglich – auch ohne nginx-Kenntnisse. Mit wenigen Klicks sind Dienste sauber über Domains erreichbar und SSL ist kein manueller Aufwand mehr. Für jeden, der mehrere Dienste selbst hostet, ist NPM ein unverzichtbares Tool.