Nginx Proxy Manager (NPM) ist eine leistungsstarke Reverse-Proxy-Lösung mit einer benutzerfreundlichen Web-Oberfläche, die es ermöglicht, mehrere Webdienste über eine einzige IP-Adresse zu verwalten und automatisch SSL-Zertifikate zu erstellen.
Voraussetzungen
Hardware und Software:
- Synology NAS mit DSM 7.0 oder höher
- Container Manager (bei älteren DSM-Versionen: Docker-Paket)
- Mindestens 2 GB RAM
- SSH-Zugang aktiviert (optional für erweiterte Konfiguration)
Netzwerk-Anforderungen:
- Freie IP-Adresse im lokalen Netzwerk
- Router mit Port-Forwarding-Möglichkeit
- Domain oder DDNS-Service (für externe Zugriffe)
Wichtiger Hinweis zu Port-Konflikten
Synology DSM nutzt standardmäßig die Ports 80 und 443 für den Web-Service. Für Nginx Proxy Manager gibt es drei Lösungsansätze:
Option 1: Alternative Ports verwenden (empfohlen für Einsteiger)
Option 2: Macvlan-Netzwerk einrichten (isolierte IP-Adresse)
Option 3: DSM-Ports freigeben (fortgeschrittene Benutzer)
Installation mit alternativen Ports
Container Manager installieren
- Paket-Zentrum öffnen
- Container Manager suchen und installieren
- Bei DSM < 7.2: Docker verwenden
Ordnerstruktur erstellen
- File Station öffnen
- Zum Ordner docker navigieren
- Neuen Ordner nginx-proxy-manager erstellen
- Unterordner erstellen:
data
letsencrypt
Container-Installation
- Container Manager öffnen
- Registry → Nach
jc21/nginx-proxy-manager
suchen - Herunterladen und latest Tag wählen
- Image → Doppelklick auf
jc21/nginx-proxy-manager
Container-Konfiguration:
Container-Name: nginx-proxy-manager
Port-Einstellungen:
- 8080:80 (HTTP)
- 8081:81 (Admin-Interface)
- 8443:443 (HTTPS)
Volume-Mappings:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
Umgebungsvariablen:
- TZ=Europe/Berlin
Installation mit Docker Compose
Docker Compose Datei erstellen
- Container Manager → Projekt → Erstellen
- Projektname:
nginx-proxy-manager
- Quelle: Docker Compose erstellen
version: "3"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- "8080:80" # HTTP Port
- "8081:81" # Admin Web Port
- "8443:443" # HTTPS Port
environment:
# SQLite Database (Standard)
DB_SQLITE_FILE: "/data/database.sqlite"
# IPv6 deaktivieren falls nicht unterstützt
DISABLE_IPV6: "true"
# Zeitzone
TZ: "Europe/Berlin"
volumes:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
Container starten
- Erstellen klicken
- Warten bis Container läuft
- Status in Container überprüfen
Installation mit separater MariaDB
Für bessere Performance und Skalierbarkeit:
version: "3"
services:
db:
image: "jc21/mariadb-aria:latest"
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "npm_root_password"
MYSQL_DATABASE: "npm"
MYSQL_USER: "npm_user"
MYSQL_PASSWORD: "npm_password"
MARIADB_AUTO_UPGRADE: "1"
volumes:
- /volume1/docker/nginx-proxy-manager/mysql:/var/lib/mysql
app:
image: "jc21/nginx-proxy-manager:latest"
container_name: nginx-proxy-manager
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
- "8081:81"
- "8443:443"
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm_user"
DB_MYSQL_PASSWORD: "npm_password"
DB_MYSQL_NAME: "npm"
DISABLE_IPV6: "true"
TZ: "Europe/Berlin"
volumes:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
Erweiterte Installation mit Macvlan
SSH-Verbindung herstellen
- Systemsteuerung → Terminal & SNMP → SSH aktivieren
- Mit SSH-Client verbinden:
ssh admin@NAS-IP
Macvlan-Netzwerk erstellen
docker network create \
--driver macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
--ip-range=192.168.1.200/32 \
-o parent=eth0 \
npm_macvlan
Parameter anpassen:
subnet
: Ihr Netzwerk-Bereichgateway
: Router-IPip-range
: Freie IP für NPM
Docker Compose mit Macvlan
version: "3"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
container_name: nginx-proxy-manager
restart: unless-stopped
networks:
npm_macvlan:
ipv4_address: 192.168.1.200
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
DISABLE_IPV6: "true"
TZ: "Europe/Berlin"
volumes:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
networks:
npm_macvlan:
external: true
DSM-Ports freigeben (Fortgeschritten)
⚠️ Warnung: Nur für erfahrene Benutzer!
Geplante Aufgabe erstellen
- Systemsteuerung → Aufgabenplaner → Erstellen → Benutzerdefiniertes Script
- Allgemein:
- Aufgabenname: "NPM Ports freigeben"
- Benutzer: root
- Zeitplan: Beim Booten
- Aufgabeneinstellungen:
#!/bin/bash
sed -i -e 's/\b80\b/8080/' -e 's/\b443\b/8443/' \
/usr/syno/share/nginx/server.mustache \
/usr/syno/share/nginx/DSM.mustache \
/usr/syno/share/nginx/WWWService.mustache
synosystemctl restart nginx
Docker Compose für freigegebene Ports
version: "3"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- "80:80" # Standard HTTP
- "82:81" # Admin (Port 81 wird von DSM verwendet)
- "443:443" # Standard HTTPS
volumes:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
Erste Konfiguration
Zugriff auf Admin-Interface
- Browser öffnen:
http://NAS-IP:8081
- Standard-Anmeldedaten:
- E-Mail:
admin@example.com
- Passwort:
changeme
- E-Mail:
Sicherheitseinstellungen
- Passwort sofort ändern
- Neue Admin-E-Mail hinterlegen
- 2FA aktivieren (empfohlen)
Erster Proxy Host
- Proxy Hosts → Add Proxy Host
- Details:
- Domain Namen:
service.example.com
- Schema:
http
- Forward Hostname/IP:
192.168.1.100
- Forward Port:
3000
- Domain Namen:
- SSL:
- SSL-Zertifikat anfordern
- Let's Encrypt verwenden
- E-Mail für Benachrichtigungen
Firewall-Konfiguration
Synology Firewall
- Systemsteuerung → Sicherheit → Firewall
- Regeln bearbeiten → Erstellen
- Ports freigeben:
- 8080 (HTTP)
- 8081 (Admin)
- 8443 (HTTPS)
Router-Konfiguration
Port-Forwarding einrichten:
- Port 80 → NAS-IP:8080
- Port 443 → NAS-IP:8443
Fehlerbehebung
Container startet nicht
Logs überprüfen:
- Container Manager → Container → nginx-proxy-manager
- Details → Protokoll
Häufige Probleme:
- Port bereits in Verwendung
- Volume-Pfad falsch
- Berechtigungsprobleme
SSL-Zertifikate fehlgeschlagen
Voraussetzungen prüfen:
- Domain erreichbar von außen
- Port 80 korrekt weitergeleitet
- DNS-Auflösung funktioniert
Let's Encrypt Limits:
- Maximal 5 Fehlversuche pro Stunde
- Maximal 50 Zertifikate pro Domain pro Woche
Admin-Interface nicht erreichbar
Mögliche Ursachen:
- Container nicht gestartet
- Port-Mapping falsch
- Firewall blockiert Zugriff
Lösung:
# Container-Status prüfen
docker ps | grep nginx-proxy-manager
# Logs anzeigen
docker logs nginx-proxy-manager
Performance-Optimierung
Cache-Konfiguration
# Custom Nginx Config: /data/nginx/custom/http.conf
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m
max_size=1g inactive=60m use_temp_path=off;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
Gzip-Komprimierung
# Custom Config für bessere Performance
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss;
Backup und Updates
Backup erstellen
Wichtige Ordner sichern:
/volume1/docker/nginx-proxy-manager/data
/volume1/docker/nginx-proxy-manager/letsencrypt
Backup-Script:
#!/bin/bash
tar -czf /volume1/backups/npm-backup-$(date +%Y%m%d).tar.gz \
/volume1/docker/nginx-proxy-manager/
Container aktualisieren
Neues Image herunterladen:
- Container Manager → Registry → nginx-proxy-manager
- Download → latest
Container stoppen und neu erstellen:
- Container → Stoppen
- Aktion → Löschen (Konfiguration bleibt)
- Image → Doppelklick → Container neu erstellen
Best Practices
Sicherheit
- Starke Passwörter für Admin-Account
- 2FA aktivieren für zusätzliche Sicherheit
- Regelmäßige Updates durchführen
- Access Control Lists verwenden
- Fail2Ban für Brute-Force-Schutz
Monitoring
- Logs regelmäßig prüfen
- SSL-Zertifikat-Ablauf überwachen
- Performance-Metriken verfolgen
- Backup-Strategien implementieren
Organisation
- Konsistente Namenskonventionen
- Dokumentation der Proxy-Hosts
- Staging-Umgebung für Tests
- Versionierung der Konfiguration
Anwendungsbeispiele
Home Assistant
Domain: homeassistant.example.com
Forward to: 192.168.1.150:8123
SSL: Let's Encrypt
WebSocket Support: Aktiviert
Nextcloud
Domain: cloud.example.com
Forward to: 192.168.1.100:80
SSL: Let's Encrypt
Additional Headers:
- X-Forwarded-Proto: $scheme
- X-Real-IP: $remote_addr
Docker-Services
Domain: portainer.example.com
Forward to: 192.168.1.50:9000
SSL: Let's Encrypt
Access List: Admin-Only
Fazit
Nginx Proxy Manager bietet eine elegante Lösung für die Verwaltung mehrerer Webdienste auf Synology NAS. Die Docker-Installation ermöglicht eine saubere Trennung vom Host-System und vereinfacht Updates. Mit den verschiedenen Installationsmethoden lässt sich NPM flexibel an unterschiedliche Netzwerk-Anforderungen anpassen.
Vorteile von NPM:
- Benutzerfreundliche Web-Oberfläche
- Automatische SSL-Zertifikate
- Erweiterte Nginx-Funktionen
- Active Directory Integration
- Umfassendes Logging
Die Kombination aus Synology DSM und Nginx Proxy Manager schafft eine professionelle Infrastruktur für Heimserver und kleine Unternehmen.