In diesem Blog erkläre ich, wie ich meinen Nginx Proxy Manager self-hosted unter Docker eingerichtet habe und wie ich für die internen Anwendungen über Let's encrypt kostenlos TLS Zertifikate ausstellen konnte.
Voraussetzungen
- Funktionsfähige Docker-Umgebung
- Docker Kenntnisse
- Firewall Ports 80 und 443 offen und intern an den Host weitergeleitet wo der Nginx Reverse Proxy Manager verwendet wird.
Der Port 80 kann immer offen gelassen werden, damit Let's encrypt die TLS Zertifikate alle 3 Monate automatisch erneuern kann oder Sie können den Port aus Sicherheitsgründen schliessen und die TLS-Zertifikate manuell erneuern und dafür den Port 80 alle 3 Monate öffnen. Der Port 443 ist immer offen.
Docker-Compose Datei erstellen
Die Docker-Compose Datei enthält alle notwendigen Angaben um einen funktionsfähigen Nginx Proxy Manager Docker-Container in einem Durchgang erstellen zu können.
Download Nginx Proxy Manager Image
Erstellen der Datenbank
Erstellen der notwendigen Volumes
Ports
Let's encrypt setup
- Erstellen sie einen Ordner mit Namen z.Bsp. "npm" in Ihrer Docker-Umgebung.
- Erstellen sie eine neue Datei in einem Editor und fügen sie den nachfolgenden Code ein.
- Sie können die Ports entsprechend anpassen. In diesem Beispiel übernehmen wir aber die Standard Ports.
- Speichern sie danach die Datei mit Erweiterung .yml in dem vorher erstellten Ordner unter dem Namen "docker-compose" ab. Am Ende lautet die Datei docker-compose.yml.
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencryptDocker-Compose Datei ausführen
Nun erstellen wir den neuen Docker-Container für den Nginx Proxy Manager. Sprich, wir werden die Docker-Compose Datei ausführen, welche dann automatisch das aktuelleste Image herunterladen und installieren wird. Ebenfalls werden die notwendigen Volumes und Datenbanken automatisch erstellt.
- Starten sie ein Command Prompt Fenster und wechseln sie in den vorher erstellten Ordner, wo sich die "docker-compose.yml" Datei befindet.
- Führen sie die Datei "docker-compose.yml" mit folgenden Befehl aus.
sudo docker compose -f docker-compose.yml up -dEinloggen in das Nginx Proxy Manager Backend
Nach dem ausführen der Docker Compose Datei wurde nun das Setup abgeschlossen und das Backend steht uns nun zur Verfügung.
- Starten sie einen Browser und geben sie folgende Adresse ein http://localhost:81.
- Loggen sie sich ein mit Benutzernamen "admin@example.com" und dem Passwort "changeme". Ändern sie diese Angaben umgehend nach dem Login.

Erstellen des ersten Host und Ausstellen des TLS-Zertifikats
Damit wir später von aussen über SSL auf den Nginx Proxy Manager zugreifen können, müssen wir diesen selbst als ersten Host einrichten.
Dies wird NICHT empfohlen. Wenn der Zugriff aber unbedingt über das Internet erfolgen bzw. über Ihre Domain, dann verwenden Sie die folgenden Einstellungen. Aktivieren Sie in Ihrem Benutzerprofil die 2-Faktor Authentifizierung. Sie können den Host testweise erstellen und danach im Nginx Reverse Proxy Manager auf der rechten Seite über das Menü einfach deaktivieren.
Ansonsten, empfiehlt es sich den Port 81 auf Ihrer Firewall/Router zu sperren bzw. nicht weiterzuleiten. Um auf Ihren Nginx Reverse Proxy Manager zugreifen zu können, empfiehlt es sich eine VPN Verbindung wie Wireguard oder OpenVPN zu verwenden.
- Klicken Sie auf Hosts

- Fügen sie einen neuen Host über das + Icon oben rechts zu.
- Geben Sie Ihre Url. ein über welche der Reverse Proxy erreichbar sein soll.
- Geben Sie das gewünschte Scheme ein. In der Regel ist es http, da die eingehenden Anfragen am Ende über SSL an den Nginx Reverse Proxy Manager gesendet werden. Also an den Port 443. Intern wird der NPM die Anfrage über http an den gewünschten Service weitersenden.
- Geben Sie den Port an, welchen Sie in der Docker Compose Datei angegeben haben.
- Aktivieren Sie die gewünschten optionalen Einstellungen wie
- Cache Assets
- Cache Assets bedeutet, dass statische Mediendateien (wie Bilder, CSS, JavaScript und Videos) zwischengespeichert werden. damit sie bei erneuten Aufrufen blitzschnell ausgeliefert werden können. Das entlastet den Server massiv und sorgt dafür, dass Webseiten für die Besucher spürbar schneller laden.
- Block Common Exploits
- ist eine Sicherheitsfunktion im Nginx Proxy Manager, die Webanwendungen vor den häufigsten vorkommenden Angreifer-Szenarien schützt. Sobald Sie dies aktivieren, bindet Nginx im Hintergrund eine vordefinierte Konfigurationsdatei.
- Websockets Support
- Nginx unterstützt WebSockets, indem es als Reverse Proxy dauerhafte., bidirektionale Verbindungen zwischen einem Client und einem Backend-Server durchreicht. Standardmässig blockiert oder verwirft Nginx die dafür nötigen Upgrade-Header. Durch eine spezielle Konfiguration, leitet Nginx diese Header weiter und hält den Verbindungskanal offen.
- Cache Assets

- Öffnen Sie die Registerkarte SSL
- Wählen Sie aus "SSL Certificate" -> "Request a new Certificate" aus.
- Aktivieren Sie
- Force SSL
- HSTS Enabled
- Die Aktivierung von HSTS (HTTP Strict Transport Security) unter Nginx wird dringend empfohlen, da es effektiv Man-in-the-Middle-Angriffe und SSL-Stripping verhindert. HSTS zwingt den Browser des Besuchers, für einen definierten Zeitraum ausschliesslich verschlüsselte HTTPS-Verbindungen zur Website aufzubauen.
- HTTP/2 Support
- Die Aktivierung wird dringend empfohlen. Es beschleunigt das Laden von Webseiten durch Multiplexing, reduziert die Latenz und wird von allen modernen Browsern unterstützt. Voraussetzung ist eine funktionierende TLS-Verschlüsselung.
- Klicken Sie danach auf "Save".
- Das TLS-Zertifikat wird nun ausgestellt. Sollten Sie einen Fehler erhalten, prüfen Sie ob die Ports 80 und 443 offen und auf Ihren Host mit dem Nginx Reverse Proxy Manager weitergeleitet sind.

Der Host wurde erfolgreich hinzugefügt und das TLS-Zertifikat wurde ausgestellt.

Portweiterleitung auf Firewall einrichten
Damit der Nginx Reverse Proxy Manager über das Internet erreichbar ist, muss auf der Firewall eine Portweiterleitung für den Port 443 auf den Nginx Host 192.168.22.50 und dem internen Port 81 eingerichtet werden.
Wenn Sie alle Services über https/443 schützen und dafür den Nginx Reverse Proxy Manager verwenden wollen, reicht es den Port 443 auf den Nginx Reverse Proxy Manager weiterzuleiten und darüber die internen Ports der verschiedenen Services in Ihrem Netzwerk anzusprechen bzw. an diese Ports, die eingehenden Anfragen zu senden.
- Eingehender Port 443
- Weiterzuleitender Port
In der Regel ist der interne Port "80" http, kann aber wenn gewünscht auch 443 sein. Dies entspricht dann einer TLS-End-zu-End Verschlüsselung.
TLS-Konfiguration prüfen
- Öffnen Sie dazu die Url. die Sie für den Nginx Reverse Proxy Manager angegeben haben.
- Klicken Sie auf das abgebildete Icon in der Url-Leiste.
- Klicken Sie auf "Verbindung ist sicher".

Klicken Sie danach auf "Zertifikat ist gültig" und prüfen Sie ob es sich um Ihr zuvor ausgestelltes Zertifikat mit Ihrem Common Name handelt.

Unter "Ausgestellt für" sollten Sie Ihre Website-Adresse sehen, auch Common Name genannt.
Unter "Ausgestellt von" sehen Sie ob das Zertifikat von Let's encrypt als CA (Certificate Authority) ausgestellt worden ist.
Prüfen Sie unter "Gültigkeitsdauer" das Ausstellungsdatum. Es sollte von dem Tag sein, an dem Sie den Host und das Zertifikat erstellt haben.
Öffnen Sie die Registerkarte "Details" und prüfen Sie den Fingerprint in Ihrem Zertifikat ob dieser mit dem Fingerprint des Zertifikat im Nginx Reverse Proxy Manager übereinstimmt.

Weitere Hosts/Services erfassen
Sie können nun weitere Hosts/Services erfassen. Verwenden Sie auf jeden Fall immer ein TLS-Zertifikat um Ihre Verbindung zum Host zu schützen.
Let's encrypt Zertifikate sind kostenlos und die Erneuerung der Zertifikate läuft automatisch im Hintergrund, sofern die vorausgesetzten Ports 80 und 443 offen sind.
Erfassen Sie die weiteren Host analog dem ersten.
Sie haben erfolgreich den Nginx Reverse Proxy Manager in Betrieb genommen.