Apache2 Reverse-Proxy: Übermittelte Webseite wird im Internet ohne Bilder angezeigt

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    wieder ich und wieder mit einem Netzwerkproblem. :blush:

    Ich habe auf einem Pi-Zero eine *.php Datei liegen. Diese befindet sich in /media/website/, also auf einem angeschlossenen USB-Stick. Die Webseite beinhaltet Bilder und zwei Grafana-Panels. In der *.php-Datei kann ich mit dem Argument 'alt=' einen Text hinterlegen, der bei einem Bild angezeigt werden soll, wenn dieses Bild nicht angezeigt werden kann. Das habe ich auch gemacht. Meine Webseite hat zum Beispiel ein Begrüßungs-Bild, wenn das jetzt nicht vorhanden ist, dann steht da an der Stelle des Bildes jetzt einfach "Begrüßung".

    Wenn ich im gleichen W-lan bin, wie der Pi-Zero, dann kann ich über die IP des Pi's die Webseite aufrufen und sie wird genau so angezeigt, wie ich es will. Mit allen Bildern und allem was dazu gehört. Das funktioniert perfekt.

    Dann habe ich einen VServer von 1&1 und habe darauf mit Apache2 einen ReversProxy eingerichtet. Die Verbindung zum VServer findet über einen VPN-Tunnel statt, den ich mit WireGuard aufgebaut habe. Ich kann von beiden Seiten erfolgreich die andere Seite über den Tunnel anpingen. Das Ganze habe ich auch nur dank eurer Hilfe hinbekommen und hat auch schon funktioniert.

    Jetzt ist es aber so, das wenn ich die Seite über das Internet aufrufen will, öffnet sich zwar die Webseite, aber komplett ohne irgendwelche Bilder, an der Stelle der Bilder steht jetzt der Ausdruck des 'alt'-Argumentes. Das kommt ziemlich schnell, aber das "Lade"-Symbole ist noch sehr lange zu sehen, am Inhalt der Webseite ändert sich aber nichts, es kommt auch keine Fehlermeldung.

    Versuche ich die Webseite über die mobilen Daten am Smartphone(Safari) aufzurufen, dann kommt ein Ladebalken, ca. 1/3 und ein schwarzer Bildschirm, mehr nicht.

    Wenn ich es am Laptop mit Firefox im privaten Modus (da werden glaub keine Cookies gespeichert) dann erscheinen wieder die 'alt'-Argummente

    Ich habe das Gefühl, dass die Bilder auf dem Weg zum Server "verloren" gehen, wie kann dass denn sein?

    Gibt es einen Grund für ein so ein Verhalten?

    Die Verbindung zum Pi ist ja da und auch der ReversProxy funktioniert, da die 'alt'-Argumente ja angezeigt werden.

    Die erstellte 'rproxy.conf' auf dem VServer:

    Code
    <VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://192.168.200.2/
        ProxyPassReverse / http://192.168.200.2/
    </VirtualHost>

    Ich weis jetzt gar nicht, welche Informationen in diesem Fall für euch hilfreich sind, da das System an sich ja funktioniert, nur eben mit Verlust der Bilder.

    Ich hatte ja in letzter Zeit ein Thema hier eröffnet in dem ich Probleme hatte, Grafana-Panels im Internet auf der Webseite anzuzeigen, mit diesem Problem habe ich sehr viele unterschiedliche Sachen probiert und Anleitungen durch gearbeitet und seit dem habe ich auch das Problem. Ich bin natürlich alles was mir noch bekannt war durch gegangen, habe jedoch keinen Fehler finden können.

    Hoffe einer von euch hatte schon mal so ein Problem und weis, an was das liegen könnte.

    Vielen Dank und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Apache2 Reverse-Proxy: Übermittelte Webseite wird im Internet ohne Bilder angezeigt? Schau mal ob du hier fündig wirst!

  • Danke für deine Antwort.

    Das sieht bei mir zum Beispiel so aus:

    Code
       <div id="hello">
        <img id="welcome" src="welcome.png" alt="Begrüßung">
       </div>

    Wenn ich "welcome.png" durch [/tt]/media/website/welcome.png[/tt] ersetze, dann kommt nur der Alternativtext ohne Bild.

    Grüße

    Dennis

    Edit: Hier mal die gesamte *.php- Datei (ohne Grafana-Panel um Fehler auszuschließen, habe ich die mal rausgenommen):

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Danke für euer Antworten.

    hyle Der Unterschied ist zu einen natürlich die IP-Adresse und zum anderen http und https. Also ich rufe im gleichen W-lan wie der Pi ist mit http und der IP-Adresse des Pi's die Webseite auf, alles funktioniert und die Grafikadresse ist zum Beispiel 192.168.0.216/tortoise_pic.jpg.

    Jetzt rufe ich die Webseite über die IP bzw. den Alias des Servers die Webseite auf, egal ob ich die Seite mit http oder https aufrufe, die Grafikadresse des Bildes ist in beiden Fällen https:/SERVER-IP/tortoise_pic.jpg. Und wenn ich diese Grafikadresse in einem neuen Tab öffne, erhalte ich diese Fehlermeldung:

    Code
    Proxy Error
    
    The proxy server received an invalid response from an upstream server.
    The proxy server could not handle the request
    
    Reason: Error reading from remote server

    Tigerbeere ich habe 'proxy_html' mit 'a2enmod proxy_html' aktiviert, das brachte leider keinen Unterschied.


    Danke und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

    • Offizieller Beitrag

    ich habe 'proxy_html' mit 'a2enmod proxy_html' aktiviert, das brachte leider keinen Unterschied.

    Danach den Server neu gestartet?


    //Nachtrag

    Habe noch das hier gefunden: https://www.ionos.de/digitalguide/s…-reverse-proxy/

  • Hallo,

    also mit der Zeile Zeile <img id="welcome" src="welcome.png" alt="Begrüßung"> wird das Bild im Document-Root des Webservers erwartet. Document-Root ist bei dir via Reverse-Proxy auf `http://192.168.200.2/`. Da wird die Anfrage dann hin durchgereicht, wobei da dann auch das Bild auch im Document-Root liegen sollte bzw. "irgendwas" auf der IP-Adresse lauschen sollte, so dass `http://192.168.200.2/BILDNAME.jpg` auch `BILDNAME.jpg` zurück liefern sollte.

    Welchen Fehler bekommst du, wenn du auf dem Client den Quelltext der Webseite aufrufst und dann auf den Link des Bild im Quelltext bekommst. Bekommst du `404 not found`?

    Gruß, noisefloor

  • Hallo und vielen Dank für die Antworten.

    Danach den Server neu gestartet?

    Ja, das mache ich immer nach jeder Änderung.


    Habe meine *.conf mal nach diesem Beispiel angepasst, hat aber leider nichts geändert. Die in der Anleitung vorgeschlagenen Module zum aktivieren, sind bei mir aktiviert.


    Welchen Fehler bekommst du, wenn du auf dem Client den Quelltext der Webseite aufrufst und dann auf den Link des Bild im Quelltext bekommst. Bekommst du `404 not found`?

    Du meinst, wenn ich die Webseite im Internet aufrufe, so wie es ja nicht funktioniert? Wenn ich das mache, dann lädt der Browser eine halbe Ewigkeit und dann kommt dieses Ergebnis:

    Wenn ich es lokal im gleichen W-lan mit der IP des Pi's mache, dann erscheint nach dem klick auf den Link auch das Bild.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

    Einmal editiert, zuletzt von Dennis89 (31. Juli 2021 um 09:15)

    • Offizieller Beitrag

    Bei dem Port

    <VirtualHost *:80>

    bin ich ehrlich gesagt etwas unsicher. Das betrifft doch den Port an dem der Apache lauschen soll oder? Wäre das dann nicht der Port 443 für SSL? :conf:

    Vielleicht kannst Du einen zweiten Eintrag mit dieser Konfiguration mal versuchen.

  • Dank für deine Antwort. Ja das ist der Port an dem der Reverse-Proxy lauschen soll. Ich habe aber das gleiche Ergebnis wenn ich die Seite mit http oder https aufrufe. Ich habe trotzdem eine zweite *.conf Datei angelegt, mit dem gleichen Inhalt, nur mit '443'. Diese Seite habe ich aktiviert und danach Apache neugestartet. Das Ergebnis ist leider unverändert.

    Ich weis nicht ob es interessant ist, aber hier habe ich mal noch die Firewalleinstellung meines VServers. Da sind gerade ein paar Ports geöffnet, von meinem Grafana-Problem.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Lege im DocRoot deines RPi (im gleichen Verzeichnis, wie dein php-File) folgendes File an und rufe es direkt über

    Code
    http://IP-DEINES-VSERVERS/testfile.html 

    auf. Erscheinen die Bilder dann?

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Guten Morgen und Danke für die Antwort.

    Habe ich gemacht, wenn ich die Seite aufrufe erscheint sofort "Testseite" dann lädt die Seite ewig und irgendwann werden dann die Alternativtexte angezeigt ohne Bilder.

    Habe es noch mit dem Smartphone über die mobilen Daten versucht. Dabei habe ich Safari verwendet. Da bekomme ich eine Meldung, dass die Seite nicht angezeigt werden kann, da der Server nicht antwortet. Nach einem Klick auf den URL, habe ich gesehen dass Safari die URL von http://IP-VSERVER/testfile.html ind http://IP-VSERVER:5000 geändert hat. Und das bei erneutem Versuch auch wieder so macht. Fireforx hier am Laptop macht sowas nicht.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Prüfe die Konfiguration und die Logs deines RPi-Webservers (nicht des rproxy). Sind da irgendwelche rewrites o.ae. aktiv?

    Stoppe deinen lokalen Webserver und starte im Verzeichnis, in dem testfile.html liegt

    Code
    sudo python3 -m http.server

    Funktioniert die Seite dann, wenn du sie wie o.g. aufrufst?

    Wenn du nichts zu sagen hast, sag einfach nichts.

    2 Mal editiert, zuletzt von llutz (31. Juli 2021 um 10:51)

  • In /var/log/apache2/ habe ich eine access.log gefunden, darin fand ich von der 'testfile.html' das:

    Die IP des Servers habe ich rausgenommen, da ich ja schon veröffentlicht habe, welche Ports gerade geöffnet sind.

    In der error.log ist das hier zu finden:

    Code
    [Sat Jul 31 09:01:02.899074 2021] [php7:error] [pid 5385] [client 192.168.200.1:46336] script '/media/website/index.php' not found or unable to stat

    In dem Ordner /var/www/html habe ich eine index.html gefunden, die habe ich in den Ordner, in der meine Webseite liegt kopiert, das hat aber nichts geändert.

    Hier mal der nicht kommentierte Teil der apache2.conf:

    Habe zur Sicherheit auch noch nach dem Wort 'rewrite' in der config-Datei gesucht, es wird aber nichts gefunden.

    ls -l /etc/apache2/conf-enabled gibt:

    Code
    lrwxrwxrwx 1 root root 30 Jun  9 20:38 charset.conf -> ../conf-available/charset.conf
    lrwxrwxrwx 1 root root 44 Jun  9 20:38 localized-error-pages.conf -> ../conf-available/localized-error-pages.conf
    lrwxrwxrwx 1 root root 46 Jun  9 20:38 other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf
    lrwxrwxrwx 1 root root 33 Jun  9 20:51 phpmyadmin.conf -> ../conf-available/phpmyadmin.conf
    lrwxrwxrwx 1 root root 31 Jun  9 20:38 security.conf -> ../conf-available/security.conf
    lrwxrwxrwx 1 root root 36 Jun  9 20:38 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf

    ls -l /etc/apache2/mods-enabled gibt:

    Ist das richtig, dass auch hier auf dem Pi Mods wie ’proxy.conf' aktiviert sind?

    und ls -l /etc/apache2/sites-enabled gibt:

    Code
    lrwxrwxrwx 1 root root 35 Jul  6 20:44 000-default.conf -> ../sites-available/000-default.conf

    Und dann an dieser Stelle noch den Inhalt der 000-default.conf

    Ich konnte jetzt leider nichts finden, das auf Rewrite hinweist, kann jemand von euch eventuell einen Fehler entdecken? Gibt es noch irgendwo Log-Files die helfen könnten?

    Vielen Dank und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Du kannst auch Portforwarding über SSH benutzen. Dafür braucht der Zero SSH Zugriff zum Onlineserver (am besten mit Keys), sodass ein Reversetunnel aufgebaut werden kann.

    Ich gebe dir mal einen Beispielbefehl für den Zero:

    Code
    ssh -N -R 8989:localhost:80 root@VPS_IP

    Du musst du am VPS in der SSH Konfiguration die Zeile #GatewayPorts no auf GatewayPorts yes setzen und den Dienst neustarten.

    Deine Firewalleinstellungen ändern, sodass Zugriff auf deinem Wunschport erlaubt wird (in diesem Beispiel 8989) und den Aufruf im Browser testen mit:

    Code
    http://VPS_IP:8989

    2 Mal editiert, zuletzt von Tigerbeere (1. August 2021 um 01:46) aus folgendem Grund: Tunnel vereinfacht (apache2 lauscht lokal auf Port 80 und soll weiterleiten an 8989 in dem Beispiel)

  • Hallo und Danke für deinen Vorschlag.

    Ich habe den Beispielbefehl von dir ausgeführt, aber so ganz zufrieden lief der wohl nicht durch:

    Code
    ssh -g -N -f -R 8989:localhost:80 *SERVER_USER*@*SERVER_IP*
    The authenticity of host '*SERVER_IP* (*SERVER_IP*)' can't be established.
    ECDSA key fingerprint is SHA256:*hier_stand_der_fingerprint*.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '*SERVER_IP*' (ECDSA) to the list of known hosts.
    Passwort:

    Nach der Eingabe des Passworts für den VServer-User, kam keine weitere Meldung mehr. Die IP und den User des VServers habe ich hier zensiert.

    In den VServereinstellungen habe ich den Port 8989 mit dem Protokoll TCP/UDP geöffnet und den Server danach neugestartet.

    Wenn ich http://SERVER_IP:8989 oder http://SERVER_IP:8989/testfile.html im Browser eingebe, bekomme ich die Meldung, das Firefox keine Verbindung zum Server aufbauen kann. Liegt das vermutlich an The authenticity of host '*SERVER_IP* (*SERVER_IP*)' can't be established. ?

    Habe ich das so überhaupt richtig verstanden?

    Danke und Grüße

    Dennis

    Edit: Ich kann vom VServer über einen VPN-Tunnel mit 192.168.200.2 eine SSH-Verbindung zum Zero aufbauen. Aber andersrum, vom Zero zum VServer mit 192.168.200.1 kann ich keine Verbindung aufbauen. Der Ping funktioniert aber in beide Richtungen.

    Jetzt ist es mir zu spät, aber hätte ich in dem Beispielbefehl die IP des VPN-Tunnels eintragen müssen?

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

    Einmal editiert, zuletzt von Dennis89 (1. August 2021 um 01:15)

  • Das ist schon richtig so, dass du nichts siehst. Das -f und -N machen das. Man ssh hilft dir dabei weiter. Du kannst es im Taskmanager auch überprüfen, dass der Befehl aktiv ist und beenden. Nimm es zum Testen heraus und schreib -v dazu, dann siehst du genau was passiert. Mach die GatewayPorts am VPS in der SSH Serverkonfiguration auf yes, bei Raspberry PI OS wäre es in /etc/ssh/sshd_config, dann SSH-Serverdienst neustarten. Danach den Reversetunnel vom Zero wieder aufbauen und testen.

    Ja, soweit hast du es richtig verstanden.

    ________

    Jetzt ist es mir zu spät, aber hätte ich in dem Beispielbefehl die IP des VPN-Tunnels eintragen müssen?

    SSH hat eigene Verschlüsselung, daher klappte es auch mit der öffentlichen IP-Adresse. Die GatewayPorts müssen noch auf. Link mit einer Beispielanleitung habe ich hinzugefügt.

    3 Mal editiert, zuletzt von Tigerbeere (1. August 2021 um 01:57) aus folgendem Grund: Link eingefügt, Tippfehler, Frage beantwortet

  • Guten Morgen,

    vielen Dank für deine Anleitung, mit dieser Methode funktioniert es! :bravo2: Die Webseite wird mit Bildern angezeigt und ist aus dem Internet erreichbar. :)

    Wenn ich das jetzt so mache, dann funktioniert das nur, wenn ich mit deinem Befehl den Reverse-Tunnel aufgebaut habe. Die Webseite auf dem Pi soll rund um die Uhr erreichbar sein. Wenn nun aus einem Grund die Internetverbindung des Pi's mal ausfällt (kommt bei unserem Netzbetreiber ab und zu mal vor) dann muss ich den Tunnel wieder neu aufbauen?

    Auf was ich hin aus will, wenn ich diese Methode verwende, dann wäre es sinnvoll ein Programm zu schreiben, dass die Internetverbindung checkt und bei Bedarf den Tunnel automatisiert wieder neu aufbaut oder gibt es da schon etwas fertiges?

    Vielen Dank und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!