#Sonstiges | NGINX Proxy Manager Installation und Einrichtung

  • Was wollen wir?

    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.

    Code
    sudo apt-get update
    sudo apt-get upgrade


    Docker installieren:

    Code
    curl -fsSL https://get.docker.com | bash


    Docker Compose installieren:

    Code
    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:

    Code
    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:

    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 :smiling_face_with_sunglasses:


    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. :winking_face:

Kommentare 19

  • 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.

    • Mach dafür am besten einen Thread im Forum auf, das hier in den Kommentaren zu klären ist etwas schwierig.

  • 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.

    • Was meinst du mit PL?

    • … sorry, Tippfehler: Portweiterleitung.

    • Ohne Portweiterleitung geht die Seite natürlich nicht. Zertifikate dürften sich auch nicht erneuern weil dafür die Seite geprüft wird.

    • … ja, genau so kenne ich es ja auch… Ich habe keine Weiterleitung aktiv und er aktualisiert die Zertifkate… ich verstehe es aktuell nicht.

    • Spannend, wie auch immer das gehen soll. Nutzt du direkt Lets Encrypt oder einen anderen Dienst?

  • 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.

  • 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

  • Wer auf light container angewiesen ist kann sich auch mariadb sparen :smiling_face:


    Hier ist meine docker-compose.yml file:


  • Hallo @jkasen vielen Dank für diese tolle Anleitung, habe ich damal genutzt und hat auch direkt funktioniert. :thumbs_up:

    Habe aber jetz mal eine Frage wie mache ich ein Update vom Nginx Container, bin was Docker angehr noch recht unerfahren :smiling_face:

    Evtl. könnte man die Anleitung auch dahingehend noch erweitern,

    Gruß Frank

    • 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

      Gefällt mir 1
    • Danke :smiling_face: es kann so einfach sein ...

  • 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?

    • ich habe es im Hauptnetz wo auch meine andere Server usw sind.

  • 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.

    • Wenn du schon eine bestehenden Installationen kannst du das trotzdem machen, da wird dann halt das neue Zertifikat und nicht mehr das alte benutzt.

  • Vielen Dank für die detaillierte Anleitung und für Deine Mühen die Du Dir gemacht hast.


    VG Peter

    Gefällt mir 1