NGINX Proxymanager installieren, um interne Dienste nach außen per FQDN erreichbar zu machen.
Warum wollen wir das?
Um die gewünschten Dienste möglichst sicher mit SSL Zertifikat zu veröffentlichen und nur wenige Ports freigeben zu müssen.
Und wie geht das genau?
Voraussetzung ist ein vorhandener Server/PC mit z.B. VMWare ESXi oder Proxmox, um eine VM zu installieren oder ein NAS mit Docker, sowie das Weiterleiten der Port 80/tcp und 443/tcp auf das entsprechende Zielsystem.
Firewall konfigurieren:
Port 80 und 443 auf die IP des Zielsystems weiterleiten, die wir weiter unten installieren:
Ubuntu installieren und Updates einspielen:
Die Grundinstallation von Ubuntu in einer VM überspringe ich an dieser Stelle mal.
Docker installieren:
Docker Compose installieren:
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Portainer installieren:
sudo docker volume create portainer_data
sudo docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Nginx Proxy Manager installieren:
Portainer über http://IP:9000 aufrufen und einen Account anlegen.
In Portainer ein Stack anlegen mit der config:
version: '3'
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
depends_on:
- db
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:latest'
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
Alles anzeigen
Deploy Stack anklicken und abwarten bis alles heruntergeladen und installiert wurde.
Danach starten wir die Docker Container NGINX Proxy Manager und die Datenbank für den Proxy Manager.
Nach dem Start der Container noch jeweils einmal drauf klicken und runter scrollen und beim Punkt "Restart Policies" noch auf das gewünschte Startverhalten nach Neustart des Servers einstellen.
Dann kann man über http://IP:81 den Proxy Manager aufrufen und sich mit "admin@example.com" und dem Kennwort "changeme" einloggen.
Nachdem man seine Login Daten angepasst hat kann man einen proxy Host einrichten:
Domain Name eingeben (eine Domain die auf eure Dyndns Adresse oder feste IP zeigt)*.
Scheme: http.
Forward Hostname/IP: IP des Servers/VM/Docker Containers/NAS.
Forward Port: Port des Dienstes den man veröffentlichen will.
Haken bei "Block Common Exploits" und "Websockets Support" setzen.
Unter SSL klickt man "Request new SSL certificate" an und setzt die Haken bei "Force SSL" und "HTTP/2 Support".
Unter Advanced kann man je nach Dienst noch Code eingeben.
Dann "Safe" anklicken und kurz warten bis das SSL Zertifikat erfolgreich angefordert wurde.
Noch einmal den Eintrag öffnen und prüfen, ob die Einstellungen bei SSL beibehalten wurden.
Nun kann man über https://DEINEDOMAIN.de den Dienst aufrufen
Hier im Beispiel mein Synology-NAS, welches intern unter https://192.168.3.2:5001 erreichbar ist:
* Ich habe das mit meiner Domain folgendermaßen gelöst:
Dyndns läuft auf meiner UDR
Domain http://www.meinedomain.de ist eingerichtet bei meinem Anbieter.
In den DNS Einstellungen lege ich mir dann einen CNAME an, der auf meine Dyndns Adresse zeigt z.B. meinnas.meinedomain.de
Im Proxymanager lege ich nun den Host Eintrag mit meinnas.meinedomain.de an und lasse das Zertifikat darauf ausstellen
Nun kann ich, wenn ich die Adresse meinnas.meinedomain.de aufrufe, die Weboberfläche meiner Synology erreichen, ohne extra einen Port eingeben zu müssen oder ähnliches und das Ganze ist auch noch mit einem Zertifikat versehen, welches sich selbst (über den Proxymanager) aktualisiert.
Genau so verfahre ich dann mit jedem weiteren Dienst, den ich von extern erreichen möchte.
Der Vorteil: ich habe nur Port 80 und 443 auf meinen Proxymanager weitergeleitet und keiner meiner Dienste ist von extern direkt erreichbar.
Viel Spass mit NGINX Proxy Manager
Disclaimer: Alle Anleitungen/Tutorials sind nach bestem Wissen und Gewissen verfasst, gehen immer von den definierten Software/Firmware-Versionen aus und sind auf das englische GUI ausgelegt.
Es gibt keine Garantien auf Erfolg. Im Falle eines Misserfolges hilft aber sicherlich die Community hier immer weiter.
Keiner der Autoren oder der Betreiber des Forums ist für die aus der Nutzung resultierenden Probleme/Herausforderungen verantwortlich.
Jegliche hier beschriebenen Schritte erfolgen ausnahmslos in eigener Verantwortung des Durchführenden. Eltern haften für ihre Kinder.
Kommentare 19
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.
Dreamer
Zunächst auch von mir vielen Dank für die Anleitung.
Das Problem ist gelöst, muss jetzt nur noch feststellen, warum ich ein "502 Bad Gateway" bekomme.
Auch dieses Problem habe ich zwischenzeitlich gelöst: Ich habe beim Host auf der Registerkarte "Details" als Scheme http und als Port 80 eingetragen, dann aber auf der Karte SSL trotzdem Force SSL und HTTP/2 aktiviert und jetzt komme ich auf den Bitwarden Server.
Warum ich da jetzt kein Konto anlegen kann muss ich noch herausfinden.
Leider habe ein Problem bei der Erstellung des SSL-Zertifikates.
Portweiterleitungen für Port 80 und 443 sind eingerichtet und funktionieren.
Mir gehört (unter anderen) die Domain "meinedomain.de"
Wenn ich den Host anlegen will und bei Domain Names z.B. "xyz.meinedomain.de" oder nur "meinedomain.de" eintrage ohne irgendwo eine weiter Einstellung zu machen, bekomme ich den Fehler "Internal Error".
Trage ich "xyz.meinedomain.de" in meinem zuständigen DNS-Server als CNAME ein, dann bekommen ich die Fehlermeldung "xyz.meinedomain.de is already in use". Ping auf die Subdomain funktioniert, ich komme so auch auf die Startseite des ngnix Servers.
Wo liegt mein Denkfehler/Problem?
Danke für jeden Hinweis.
jkasten
Mach dafür am besten einen Thread im Forum auf, das hier in den Kommentaren zu klären ist etwas schwierig.
taxman
Hallo,
kurze Frage: Hat sich bei NGinx etwas in der Config geändert, ich habe gerade festgestellt, das ich ohne PL die Zertifikate erneuern kann. Der Zugriff auf die Domän ist jedoch auch weiterhin nur mit PL möglich. Das war doch nicht schon immer so. Danke.
jkasten
Was meinst du mit PL?
taxman
… sorry, Tippfehler: Portweiterleitung.
jkasten
Ohne Portweiterleitung geht die Seite natürlich nicht. Zertifikate dürften sich auch nicht erneuern weil dafür die Seite geprüft wird.
taxman
… ja, genau so kenne ich es ja auch… Ich habe keine Weiterleitung aktiv und er aktualisiert die Zertifkate… ich verstehe es aktuell nicht.
jkasten
Spannend, wie auch immer das gehen soll. Nutzt du direkt Lets Encrypt oder einen anderen Dienst?
jensche
Danke für die Anleitung. Installation läuft bei mir auf einer Synology im VLAN 106.
Die Weiterleitung auf den Proxymanager läuft: npm.domain.de auf http://nginx-proxy-manager:81
Domain wurde mit einer CNAME auf die DYNDNS Adresse erstellt welche auf der UDM läuft. Das klappt soweit.
Nun habe ich aber das Problem das ich keine weiteren Hosts erstellen kann. Also z.b. von Proxy Manager (VLAN 06) auf ein anderes VLAN funktioniert nicht.
In der Firewall habe ich jedoch die Freigabe gemacht das meine Synology mit NPM auf alle anderen Synology (wo eben andere Services laufen) zugreifen kann.
Irgendwie krieg ich das nicht hin. ich habe auch schon IP auf alle Synologys freigeschaltet probiert. Auch das geht nicht. Irgendwo ist da der Wurm drin.
exitus
Brauche dringend Hilfe bin seit Tagen verzweifelt
Mein Problem Nginx ist auf Proxmox mit Docker installiert und dns über Duckdns ip weiterleitung klappt.
Mein Problem ich leite zb. iobroker intern ip 172.16.0.10:8081 auf homeassist.duckdns.org um.
SSL anlegen alles klappt es steht auch encypt und Online wenn ich in mein netzwerk über wlan online bin klappt auch die auflösung homeassist.duckdns.org sobald ich ausserhalb von mein netzwerk verbinden möchte klappt es nicht aber http geht.
Nginx läuft auf 172.16.0.12 die ports 80,443 habe ich auf die ip 172.16.0.12 weitergeleitet auf mein Dream Machine.
Kann jemand mir sagen warum http klappt und nicht Https von externen Netzwerk??
Mein dream mascine hängt hinter fritzbox > fritzbox fungiert als modem unifi wählt sich selber über wan
꧁𓊈𒆜 ƁєηLυє 𒆜𓊉꧂
Wer auf light container angewiesen ist kann sich auch mariadb sparen
Hier ist meine docker-compose.yml file:
Frank579
Hallo @jkasen vielen Dank für diese tolle Anleitung, habe ich damal genutzt und hat auch direkt funktioniert.
Habe aber jetz mal eine Frage wie mache ich ein Update vom Nginx Container, bin was Docker angehr noch recht unerfahren
Evtl. könnte man die Anleitung auch dahingehend noch erweitern,
Gruß Frank
jkasten
Das kannst du ganz einfach über Portainer machen. Klicke auf den Container vom Nginx und dann auf recreate. Im nächsten Fenster den Haken bei Pull latest image setzen. Das wars schon
Frank579
Danke es kann so einfach sein ...
anderl1969
Bin grad am überlegen, ich welches Subnet ich den Reverse-Proxy packen soll?
Ins Default-Netz zu den Unifi Geräten, ins IoT-Netz oder ein eigenes Netz spendieren?
jkasten
ich habe es im Hauptnetz wo auch meine andere Server usw sind.
Drago_r
Auch vielen Dank für die tolle Anleitung.
aber es tauchen Fragen auf.
Das geht aber nur bei neuen Installationen, oder? Bei bestehenden Nextcloud oder z.b Bitwarden wo schon SSL Zertifikate erstellt sind kann man nicht nachträglich da drauf packen?
Wenn man die Sachen neu machen würde, sollten diese dann ohne SSL installiert werden?
Das erschließt sich mir gerade nicht ganz.
jkasten
Wenn du schon eine bestehenden Installationen kannst du das trotzdem machen, da wird dann halt das neue Zertifikat und nicht mehr das alte benutzt.
Nukite
Vielen Dank für die detaillierte Anleitung und für Deine Mühen die Du Dir gemacht hast.
VG Peter