Contao-Camp 2024
Ergebnis 1 bis 20 von 20

Thema: Contao hinter nginx Reverse Proxy in Docker

  1. #1
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Frage Contao hinter nginx Reverse Proxy in Docker

    Hallo,

    ich weiß, das Thema wurde schon mehrmals beschrieben, aber die anderen Hinweise halfen nichts und eine Nachfrage in einer älteren Diskussion wurden leider nicht beantwortet.

    Umgebung:
    Contao 4.9.12 in Docker, installiert mit Contao Manager incl. neuester Updates
    Docker läuft auf 192.168.xxx.yyy und Contao ist lokal erreichbar unter 192.168.xxx.yyy:8080
    Contao Startseite HTTPS ist nicht ausgewählt.
    nginx läuft auf Server 192.168.xxx.zzz als Reverse Proxy, der https://contao.domain.com auf http:192.168.xxx.yyy:8080 umlenkt.
    (in dieser Konfiguration laufen auch andere Applikationen hinter nginx)

    Also von extern soll es über die Domain mit https://contao.domain.com laufen, intern mit http://192.168.xxx.yyy:8080

    Als Test habe ich das MATE Theme installiert.

    Intern läuft über "http://xx.xx.xx.xxort" alles gut.
    snip_ok.png
    Extern mit "https://domain" fehlen Inhalte.
    snip_bad.png

    Die Umgebungsvariable im CONTAO host Betriebssystem TRUSTED_PROXIES ist mit 192.168.xxx.0/24 gesetzt.
    Ich hatte nach einem Hinweis auch die Docker IP 172.17.0.0/24 hinzugefügt, was aber auch nicht geholfen hat.
    Aus index.php und .htaccess habe ich alle Anpassungen wieder herausgenommen.

    die nginx Reverse Proxy conf:
    Code:
    server {
      listen 80;
      listen [::]:80;
      server_name contao.domain.com;
      return 301 https://$server_name$request_uri;
    }
    
    
    
    
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name contao.domain.com;
      ssl on;
    
      ssl_certificate /etc/letsencrypt/live/......
      ........
      ssl_trusted_certificate /etc/letsencrypt/live/......
    
      }
    
    
      location / {
    
        proxy_buffering on;
        proxy_buffers 12 12k;
        proxy_redirect off;
    
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
    
    
        proxy_pass http://192.168.xxx.yyy:8080;
        proxy_redirect off;
    
      }
    }
    Sonst alles mögliche aus dem Forum hier versucht.

    Gibt es einen Hinweis , was ich noch versuchen könnte?

    Danke

  2. #2
    Administratorin Avatar von lucina
    Registriert seit
    19.06.2009.
    Ort
    Kiel (DE)
    Beiträge
    7.328
    Partner-ID
    152
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Was fehlt denn genau?

  3. #3
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    wenn ich das wüßte?!

    wie geschrieben kommen beim Aufruf von extern mit https:/domain. nicht ale Inhalte zurück. Ich glaube, dass nginx alles o.k. ist aber Contao nicht weiss, dass extern über https: zugegriffen wird.
    Intern läuft für Contao alles über http: da die Zertifikate nur auf dem nginx Reverse Proxy aufgesetzt werden.
    So habe ich Wordpress und andere Applikationen am Laufen.

    Ich denke es liegt irgendwie an trusted_proxies oder irgend einer Contao Einstellung, damit diese https extern unterstützt (links ...) ohne selbst nur unter https zu laufen.
    Daher habe ich für die Startseite auch nicht HTTPS selektiert.
    Einige Hints hier im Forum sind nicht mehr für Contao 4.9.x gültig.
    Allerdings bin ich auch noch völlig neu in Contao.

    https://domain --> nginx: nach http://192....:8080. --> Response: Theme ohne Formatiering. - siehe Screenshots aus Anfrage.

    Weitere Fragen/Hilfen?

  4. #4
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Frage Erfahrung

    gibt es denn keinen Spezialisten, der Contao in einem Docker Container wirklich hinter einem nginx Reverse Proxy zum Laufen bekommen hat?
    (Von außen über https:// und innen als http:// ansprechbar)

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Welchen Inhalt hat die Umgebungsvariable TRUSTED_PROXIES aktuell?
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Welchen Inhalt hat die Umgebungsvariable TRUSTED_PROXIES aktuell?

    TRUSTED_PROXIES=192.168.179.0/24,172.17.0.0/24

    Das ist der derzeitige Stand: der nginx Reverse Proxy ist 192.168.179.163 und der Docker-Container in dem Contao läuft: 172.17.0.4

    Die Datenbank läuft in einem anderen Docker Container.

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Gib mal am Anfang der index.php von Contao folgendes rein:
    PHP-Code:
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        
    $ip $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) {
        
    $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        
    $ip $_SERVER['REMOTE_ADDR'];
    }

    echo 
    $ip;
    exit; 
    Greife dann wieder auf die Contao Installation zu und prüfe die IP, die tatsächlich dann auf den Web Server zugreift.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Greife dann wieder auf die Contao Installation zu und prüfe die IP, die tatsächlich dann auf den Web Server zugreift.
    Dann wird die IP-Adresse des DSL Anschlusses gezeigt. Das ist natürlich ungünstig. Ich habe diese dann TRUSTED_PROXIES hinzugefügt.
    DSL/Fritzbox (externe dynamische Adresse, die angezeigt wurde) - Reverse Proxy - Docker Server - Docker Container

    Danach (index.php wieder bereinigt) kommt dann ein Seitenzugriffsfehler vom Reverse Proxy, den ich erstmal verstehen muss.

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Bzw. mach den Test nochmal mit
    PHP-Code:
    echo '<pre>';
    var_dump($_SERVER['HTTP_CLIENT_IP']);
    var_dump($_SERVER['HTTP_X_FORWARDED_FOR']);
    var_dump($_SERVER['REMOTE_ADDR']);
    echo 
    '</pre>';
    exit; 
    Und poste das Ergebnis.
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Bzw. mach den Test nochmal mit
    ....
    Und poste das Ergebnis.
    Ergebnis:

    Notice: Undefined index: HTTP_CLIENT_IP in /var/www/html/contao/web/index.php on line 6

    NULL
    string(14) "92.116.XXX.YYY"
    string(10) "172.17.0.1"


    Hinweis: natürlich ist 92.116.XXX.YYY eine richtige IP-Adresse, wieder die externe des DSL Anschlusses.

  11. #11
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    wenn HTTP_CLIENT_IP nicht definiert ist, wer hat oder wo ist denn bei einer fertigen Contao Manager Installation dann einen Fehler?
    Komisch, viele Applikationen laufen in dieser Konstellation (auch Wordpress), nur Contao will in einer modernen und sicheren Container Umgebung mit Reverse Proxy nicht laufen.

    Noch irgend welche Hinweise?

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Zitat Zitat von Gnomi_Berlin Beitrag anzeigen
    wenn HTTP_CLIENT_IP nicht definiert ist, wer hat oder wo ist denn bei einer fertigen Contao Manager Installation dann einen Fehler?
    Wie meinst du das?



    Zitat Zitat von Gnomi_Berlin Beitrag anzeigen
    Komisch, viele Applikationen laufen in dieser Konstellation (auch Wordpress), nur Contao will in einer modernen und sicheren Container Umgebung mit Reverse Proxy nicht laufen.
    In Symfony musst du die Proxy Server IP dediziert in der TRUSTED_PROXIES Environment Variable eintragen. Nur wenn die REMOTE_ADDR von dieser IP kommt wird den HTTP_X_FORWARDED_… Headern vertraut, andernfalls aus Sicherheitsgründen nicht. Theoretisch sollte es bei dir funktionieren, da du ja die IP bzw. das Subnet des Proxys bereits in der TRUSTED_PROXIES Umgebungsvariable eingetragen hast.
    Geändert von Spooky (31.03.2021 um 14:00 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie meinst du das?
    In Post #10 sieht man als Ergebnis Deines gewünsvhten Tests, dass diese Variable (HTTP_CLIENT_IP) bei mir nicht gesetzt ist.

    Zitat Zitat von Spooky Beitrag anzeigen
    In Symfony musst du die Proxy Server IP dediziert in der TRUSTED_PROXIES Environment Variable eintragen. Nur wenn die REMOTE_ADDR von dieser IP kommt wird den HTTP_X_FORWARDED_… Headern vertraut, andernfalls aus Sicherheitsgründen nicht. Theoretisch sollte es bei dir funktionieren, da du ja die IP bzw. das Subnet des Proxys bereits in der TRUSTED_PROXIES Umgebungsvariable eingetragen hast.
    Da sich die DSL Adresse bei privaten DSL Anschlüssen ständig ändert, ist es hoffentlich nicht diese Adresse (HTTP_X_FORWARDED_FOR), die immer geprüft wird und in TRUSTED_PROXIES stehen muss. Dann könnte ich Contao nicht verwenden.
    Aber selbst bei der Probe diese IP-Adresse einzutragen, habe ich noch nie eine Contao Seite von extern vernünftig dargestellt bekommen. Wie geschrieben, ist der Reverse Proxy für das SSL-Zertifikat und die https: Verbindung zuständig. Innen soll alles nur mit http funktionieren. Aber so sehe ich immer diese unvollständig dargestellte WebSeite von meinem Screenshot oben.
    Leider habe ich keine Idee mehr, wie Contao nutzbar ist oder wie man hier ohne PN oder direkte Beispiele weiterkommen kann.
    Aber vielen Dank für die Mühe bisher.

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Zitat Zitat von Gnomi_Berlin Beitrag anzeigen
    In Post #10 sieht man als Ergebnis Deines gewünsvhten Tests, dass diese Variable (HTTP_CLIENT_IP) bei mir nicht gesetzt ist.
    Ja, das ist normal.



    Zitat Zitat von Gnomi_Berlin Beitrag anzeigen
    Da sich die DSL Adresse bei privaten DSL Anschlüssen ständig ändert, ist es hoffentlich nicht diese Adresse (HTTP_X_FORWARDED_FOR), die immer geprüft wird und in TRUSTED_PROXIES stehen muss.
    Nein, es ist wie schon erwähnt die Adresse in REMOTE_ADDR.
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer Avatar von hjo
    Registriert seit
    08.01.2013.
    Ort
    Wuppertal
    Beiträge
    118

    Standard

    Hallo Gnomi_Berlin,

    ich habe zwar keine Ahnung von Contao in Docker, aber die Zeile im Post #6 wundert mich.

    TRUSTED_PROXIES=192.168.179.0/24,172.17.0.0/24

    Warum wird der Variable TRUSTED_PROXIES ein IP-Bereich übergeben und nicht die IP des Proxis (192.168.179.163)?
    In deiner Anweisung übergibst du zwei IP-Bereiche zweier Class-C Netze.


    Gemäß der Quelle: https://teqqy.de/nextcloud-docker-tu...ep-zum-erfolg/ sollte die Angabe sich aus IP-Adresse mit anschließender Netzgröße zusammensetzen.

    Unter der Quelle https://goneuland.de/nextcloud-serve...-installieren/ - Punkt 6.2 Reverse Proxy Konfiguration - wird auch eine einzelne IP genommen.

    Vielleicht liegt hierin der Fehler?

    Hans-Jürgen

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    Die Angabe von Subnets sollte funktionieren: https://symfony.com/doc/current/deployment/proxies.html
    » sponsor me via GitHub or PayPal or Revolut

  17. #17
    Contao-Nutzer Avatar von hjo
    Registriert seit
    08.01.2013.
    Ort
    Wuppertal
    Beiträge
    118

    Standard

    Hallo Spooky,

    ich habe die Seite deines Links gelesen, aber keinen Hinweis gefunden das ein IP-Bereich auch geht.
    Im 1. Abschnitt wird 192.0.0.1 benutzt.
    Danach die 127.0.0.1
    Auch die Variabel REMOTE_ADDR wird verwendet.
    Das sind aber alles Einzel-IPs.

    Vielleicht überlese ich etwas. Kannst du mir den Absatz sagen wo du die Info gefunden hast?

    Danke

    Hans-Jürgen

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.893
    Partner-ID
    10107

    Standard

    https://symfony.com/doc/current/depl...trustedproxies



    Lässt sich ansonsten auch am Code ablesen.
    Angehängte Grafiken Angehängte Grafiken
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Nutzer
    Registriert seit
    06.03.2021.
    Beiträge
    9

    Standard

    Hallo,

    ich bin leider beim Versuch nicht weitergekommen und ob mit TRUSTED_PROXIES und fester IP-Adresse oder IP-Bereich, nichts half.

    Ich habe jetzt den Docker-Container gelöscht und einen eigenen ab Linux neu aufgebaut. Apache - php - ...
    Nun wieder an dem Error 500 für Contao Manager gescheitert, wie hier im Forum schon diskutiert....richtiger Web-Einstieg.... .../web und auf einmal geht der Contao-Manager in einem anderen Browser
    Anscheinend wieder dieses "blöde" Cache Problem...

    Ich hoffe bald an dem alten Punkt mit den Tests wieder zu sein.... Aber gegenüber Wordpress ist das wirklich hier zum verzweifeln. Ob das nun an Symfony oder Contao liegt, ist da egal...
    Ich wollte nur jemandem zum Test mal eine Speilumgebung aufsetzen....na-ja.
    Also es geht weiter...

  20. #20
    Contao-Nutzer Avatar von Ling
    Registriert seit
    09.04.2010.
    Ort
    Tübingen
    Beiträge
    57

    Standard

    Hey Gnomi,

    ich hatte dasselbe Problem wie du. Gelöst bekommen habe ich es schlussendlich so
    PHP-Code:
    // In /web/app.php bzw. /web/index.php
    [...]
    $loader = require __DIR__.'/../vendor/autoload.php';

    Request::setTrustedProxies(['x.x.x.x'], -1);
    $request Request::createFromGlobals();
    [...] 
    Scheint auf den ersten Blick zu funktionieren. Wäre ganz nais, wenn das irgendwo dokumentiert wäre. Die Problemstellung mit einem Docker Container hinter einem Proxy ist ja jetzt nicht so ein ungewöhnlicher Fall.
    Geändert von Ling (27.01.2022 um 14:54 Uhr) Grund: Fixed typo

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •