Interne Seite extern Darstellen
Markus Rost
- webserver
Hallo,
ich habe eine Frage. Ich habe bei mir Zuhause im Netzwerk einen Webserver (Apache) der von Außen erreichbar ist. Nun habe ich intern von verschiedenen Geräten Konfigurationsseiten und dieses möchte ich nun in meine Internetseite einbinden. Ein IFrame wird nicht funktionieren, da die Konfigurationsseiten nicht von außen erreichbar sind und diese auch nicht direkt erreichbar sein sollen, sondern nur über eine Art Gateway.
Was gibt es hier für Möglichkeiten?
Gruß
Markus
Moin Moin!
Reverse Proxy, Port Forwarding.
Alexander
Das ist irgendwie noch nicht so das was ich mir vorstelle, denn dann kann ich gleich den Port von meinem Router forwarden lassen.
Ich will das Ganze so in meine Homepage einbauen können, dass ich mich an der Homepage anmelden muss und anschließend erst auf den Inhalt zugreifen kann.
Gruß
Markus
Hi,
Ich habe bei mir Zuhause im Netzwerk einen Webserver (Apache) der von Außen erreichbar ist. Nun habe ich intern von verschiedenen Geräten Konfigurationsseiten und dieses möchte ich nun in meine Internetseite einbinden.
das ist aber kompliziert und knifflig. ;-)
Dabei muss dein lokaler Apache als Proxy agieren. Denn die internen IP-Adressen sind ja von außen nicht direkt erreichbar, und im Router kannst du auch keine direkten Forwarding Rules einrichten: Der Router müsste ja anhand bestimmter Merkmale der URL den Request an unterschiedliche lokale IPs weiterleiten. Mir ist bisher keiner bekannt, der das kann.
Eine Lösung: Lass alle Requests, die du intern auf ein bestimmtes Gerät leiten willst, zunächst auf http://example.net/redirect.php/device/ zeigen. Dann ist redirect.php ein einfaches PHP-Script, das nur den HTTP-Request an das gewünschte Gerät im LAN weiterreicht und die Antwort entsprechend zurückgibt - also eine Art Proxy.
Letztendlich dürfte das aber auch nicht einfacher sein, als mod_proxy zu konfigurieren.
So long,
Martin
Hi,
danke für die Antwort.
Wie müsste denn das Script aussehen, damit auch Get und Post funktioniert?
Gruß
Markus
Hallo Markus,
Wie müsste denn das Script aussehen, damit auch Get und Post funktioniert?
kann ich dir hier nur schematisch erläutern:
* Request-Methode ermitteln: $_SERVER['REQUEST_METHOD']
* Zielpfad ermitteln: $_SERVER['PATH_INFO']
* Plausibilitätskontrolle
* Mit fsockopen eine HTTP-Verbindung zum internen Gerät herstellen
* HTTP-Request absetzen (Methode wurde oben ermittelt)
* bei POST den Datenblock hinterherschicken
* Antwort vom Gerät an anfragenden Client zurücksenden, bis feof()
* Socket-Verbindung zum Gerät schließen
Das ist jetzt erstmal "nur so aus dem Handgelenk". Einzelne Punkte erfordern sicher noch etwas Detailarbeit, z.B. das direkte Weiterreichen der POST-Daten, da der Zugriff auf die vom Client empfangenen Rohdaten anscheinend nicht zuverlässig möglich ist (ich habe auf die Schnelle einige Foren- und Newsbeiträge gefunden, die vermuten lassen, dass das nicht immer funktioniert).
Ich weiß im Moment auch nicht, ob ich mit PHP auf sämtliche HTTP-Header (auch nicht-standardisierte X-Header) des Requests zugreifen kann. Das würde ich aber gern, damit ich diese Header auch an das adressierte interne Gerät weitergeben kann.
Schließlich ist noch die Frage, ob man die Response-Daten vom Gerät parsen und ggf. Pfadangaben so transformieren möchte, dass sie dem "externen" Adressierungsschema entsprechen - beispielsweise also http://device/foo.xy in http://example.net/redirect.php/device/foo.xy umsetzen.
Du siehst, das ist nicht trivial. Hat aber auch niemand behauptet. ;-)
Gutes neues Jahr noch,
Martin