Problem mit Routing in einem proxmox Container (nginx reverse proxy)

  • Moin. Ich habe proxmox auf einem VPS500 mit einem nginx reverse proxy container laufen.


    Bisher hatte ich immer debian container erstellt und darin dann die gewünschte "app" installiert. Jetzt wollte ich mal die Turnkey Image ausprobieren und habe das nextcloud image genommen. In den Turnkey Images werden folgende Apps mitinstalliert: Webmin, shellinabox und Adminer.


    Webmin Aufruf soll erfolgen über:

    nextcloud.domain.de/webmin/

    Nach erfolgreicher Anmeldung, lande ich immer auf der nextcloud Instanz:

    nextcloud.domain.de/index.php/login


    Irgendwie schaffe ich es nicht, das nginx den Port intern behält. Meinetwegen kann der aufruf auch über domain:port erfolgen, das kriege ich aber auch nicht hin ...


    Hier die (letzte) conf für die subdomain:


    Wo habe ich das Brett vorm Kopf?


    Im Grunde will ich die Apps garnicht nutzen bzw. nur bei Bedarf mal Adminer verfügbar machen.

    Mich nervt aber, dass ich es nicht hinbekomme.

  • Moin.


    Bei mir läuft ein ähnliches Setup. Ich distanziere mich allerdings von fertigen Images - bau es lieber selbst auf, da weißt du, was du hast und vor allem ist ein Lerneffekt da.


    Ich habe einen Server mit einer IPv4 und einer IPv6. Die Firewalls von Proxmox sind überall aus, ich mache mein Firewalling selbst mit iptables.


    Ich habe einen nginx Container und mehrere Container mit diversen Webapps.


    Per iptables auf dem Proxmox Host mache ich also ein Portforwarding von Port 80/tcp und 443/tcp auf den nginx Container.

    Dieser splittet dann je nach Domain auf und leitet den Traffic an den entsprechenden Container mit der Webapp an.


    Also wenn ich jetzt meinen Container per cloud.domain.tld anspreche, werde ich mit dem Nextcloud Container verbunden und wenn ich ihn per monitoring.domain.tld anspreche, dann mit meinem IcingaWeb.


    Hier sind mal meine nginx Konfigurationen für meine Nextcloud. Die kannst du dir eigentlich zum Vorbild nehmen. Das SSL arbeitet mit einem ECDSA (ec-384) Zertifikat und mit OCSP must staple. Das musst du bei der Zertifikatsanfrage in acme.sh mitgeben. Wenn man mit OCSP arbeitet, muss man auch OCSP Caching betreiben, sonst kann es zu nervigen Fehlermeldungen im Browser kommen. Mehr Infos hier.

    Code: http_redirect_acme.conf
    # acme challenge config
    include vhost.d/subconfigs/acme.conf;
    
    # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response (if its not a bot)
    location / {
        include vhost.d/subconfigs/botcheck.conf;
    
        return 301 https://$host$request_uri;
    }
    Code: botcheck.conf
    # send no answer if a bot user agent is asking
    if ( $is_bot ) {
        return 444;
    }
    Code: proxy_header.conf
    proxy_set_header        Host                    $http_host;
    proxy_set_header        X-Real-IP               $remote_addr;
    proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto       $scheme;
    proxy_cookie_path       /                       "/; secure; HttpOnly; SameSite=strict;";


    acme.sh sollte man übrigens nicht unbedingt als root laufen lassen... ;)


    Es empfiehlt sich auch, auf dem Proxmox Host noch ein Wireguard VPN aufzusetzen und zwischen diesem und der Bridge zu routen/forwarden. Das hat den Vorteil, dass du SSH Ports, phpMyAdmin, Webmin, Shellinabox usw usw nicht von außen zugänglich machen musst. Das erhöht den Bedienkomfort und die Sicherheit erheblich.


    Wenn du noch Fragen hast, dann stell sie mir bzw. uns gern. :)

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Erstmal danke für Deine Antwort und die configs.


    Den proxy nutze ich ja auch bereits. Vom host wird bisher Port 80 und 443 direkt an den proxy weitergeleitet.

    Für mein Problem oben hatte ich jetzt noch weitere weitergeleitet, aber das klappt ja bisher nicht,


    Zertifikate mache ich bisher mit acme über die DNS API. OCSP muss ich mir mal anschauen.


    Wireguard will ich auch unbedingt nutzen. Hab ich mir aber noch nicht angeschaut. Da brauche ich einen guten Einstieg. Hast Du da nen Tipp?


    Ich guck mal wie ich voran komme, erstmal noch ein nextcloud aufsetzen, ich will meine daten vom webhosting umziehen.

  • Nochmal kurz um dein Setup zu verstehen. Du hast einen Proxmox Host, einen nginx Container und einen/mehrere Webapp Container?Oder nginx direkt auf dem Proxmox Host?


    Hast Du da nen Tipp?

    Die Wireguard-eigene Dokumentation ist gut. Ansonsten musst du dich halt etwas zu iptables usw belesen, um das NAT nach außen + das Forwarding zwischen den Netzen zu gewährleisten.


    Ich guck mal wie ich voran komme, erstmal noch ein nextcloud aufsetzen, ich will meine daten vom webhosting umziehen.

    Schalt bitte einen Gang zurück und ziehe keine produktiven Anwendungen/Daten auf einen Server bzw. Proxmox Host um, den du gerade noch aufbaust. Das ist ein Sicherheitsrisiko für deine Daten und du bist dann gezwungen, den Server laufen zu lassen.


    So kannst du sagen "Okay, ich weiß nicht, ob das stabil läuft und sicher ist, also fahr ich den Server runter und mach morgen weiter." - das geht nicht, wenn er in dieser Aufbauzeit schon produktiv läuft.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Mir ging es ja nur um das Routing was ich nicht hinbekommen habe.


    Ich habe den proxmox host auf dem zusätzlich nur noch fail2ban läuft. die ports 80 und 443 werden an einen container weitergeleitet. auf dem läuft der nginx proxy welche dann je nach domain routet.

  • Okay. Ich habe mir deine Konfiguration nochmal angesehen. Du verbindest dich mit deinen Containern per https:// - das macht so nur wenig Sinn, behaupte ich mal. Du möchtest dich viel eher über http:// auf Port 80 verbinden (siehe meine Konfiguration).


    Sollte ein Container bzw. die Applikation nur über https:// erreichbar sein, dann verwendet diese vermutlich ein selbst signiertes SSL Zertifikat. Probier mal, die Container entweder per http:// mit Angabe von Port 80 anzusprechen oder per https:// und setz dann noch die Einstellung "proxy_ssl_verify off;"

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber