» ProxyPass funktioniert nicht in .htaccess - PHP Proxy als Lösung

MySQL Abfrage wie in der Konsole formatiert ausgebenNeuen Thread eröffnenNeue Antwort erstellenKomprimierung bei Hetzner aktivieren
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
21.02.2017, 12:01
zitieren

Ich habe einen Serverumzug durchgeführt und trotz aller Tests im Vorfeld kam es dann leider nach der DNS Umstellung zu einem Fehler. Nun hieß es schnell handeln und alle Besucher auf den alten Server umleiten.

Der neue Server bot leider nur Zugriff auf die .htaccess. Im Grunde reicht das auch, wenn man auf dem alten Server eine Alias-Domain hat oder noch eine Domain, die nicht umgezogen wurde. Dann kann man das machen:
RewriteEngine on
RewriteRule  (.*)  http://domainOtherServer.com/$1  [P,L]

Allerdings war der andere Server in dem Fall ein Root-Server ohne Alias-Domain, so dass nur die IP blieb über die ich die Website nicht öffnen konnte. Und zu allem Übel verlangte die betroffene Shop-Software aus Lizenzgründen den Aufruf über die Original Domain.

Das hätte ich nun mit der folgenden Apache-Konfiguration lösen können:
ProxyPreserveHost On
ProxyPass / http://ipOtherServer/
ProxyPassReverse / http://ipOtherServer/

In dem Fall sorgt dann
ProxyPreserveHost
dafür, dass die Original-Domain in die HTTP-Requests aufgenommen wird und alles ist gut.

Aber wie gesagt hatte ich nur Zugriff auf die .htaccess. Also blieb mir nichts anderes übrig als auf die Schnelle einen Proxy in PHP zu realisieren:
<?php
// debugging
$curl_debug = $_SERVER['REMOTE_ADDR'] == '0.0.0.0' ? true : false;
error_reporting(E_ALL);
ini_set('display_errors', 1);
// backward compatibility
if (!function_exists('getallheaders')) { function getallheaders() {
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[ str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5))))) ] = $value;
}
}
return $headers;
}}
// obtain visitors request headers
$headers = array();
$getheaders = getallheaders();
foreach (array_reverse($getheaders) as $name => $value) {
$headers[] = $name . ': ' . $value;
}
// curl
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://1.2.3.4' . $_SERVER['REQUEST_URI']);
// forward visitors headers
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// needed by curl_getinfo() to receive response header from target server
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// optional use POST
if ($_POST) {
curl_setopt($curl, CURLOPT_POST, 1);
// did not work without http_build_query()
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($_POST));
}
// send request
$response = curl_exec($curl);
// extract header and body from response
$curl_info = curl_getinfo($curl);
$header_size = $curl_info['header_size'];
$http_header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
curl_close($curl);
// forward headers from target server to visitor
$headers = explode(PHP_EOL, $http_header);
foreach ($headers as $header) {
// our server combined the chunked body already, so remove this encoding type
if (substr($header, 0, 17) == 'Transfer-Encoding' && strpos($header, 'chunked') !== false) {
$header = str_ireplace('chunked', '', $header);
}
header($header, false);
}
echo $body;
// debugging
if ($curl_debug) {
file_put_contents('proxy.log', print_r(array(
'time' => time(),
'info' => $curl_info,
'header' => $http_header,
'body' => $body,
'response' => $response,
), true), FILE_APPEND | LOCK_EX);
}
?>

Die Datei wurde dann als proxy.php abgespeichert und das dann in der .htaccess eingefügt:
RewriteEngine On
RewriteRule ^(.*)$ proxy.php?uri=$1 [L]

Das führt nun dazu, dass alle Anfragen an den Server durch die proxy.php verarbeitet werden und das Script wiederum leitet alles an den anderen Server weiter und holt die Antwort ab und gibt sie direkt aus. Also eben das was ProxyPass machen würde.

Wer das Script einsetzen möchte, muss nur die IP "1.2.3.4" anpassen. Ob nun vom alten auf den neuen Server oder andersherum spielt bei dem Script keine Rolle. Man kann es also auch allgemein bei einem Serverumzug einsetzen, wenn man möchte, dass alle Besucher sofort, also noch bevor neue DNS Einstellungen greifen, auf den neuen Server weitergeleitet werden.


pn email
Gast 
21.02.2017, 12:01
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "ProxyPass funktioniert nicht in .htaccess - PHP Proxy als Lösung" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
.htaccess www-Weiterleitung oder: Wie man es nicht macht
Im Netz finden sich viele .htaccess Anweisungen, mit denen man "ohne www" Domains auf "www." umleitet. Hier ein Beispiel: RewriteEngine On RewriteCond %&#123;HTTP_HOST&#125; ^example\.com$ &#91;NC&#93; RewriteRule...
[Allgemein]von mgutt
0
234
06.04.2015, 22:32
mgutt
Irgendwas stimmt da nicht: elFH Beifahrer funktioniert nicht
So hab den Tuning guide vom Zaitochi benutzt und mir Fensterheber und Spiegel nachgerüstet.... Jetzt hab ich ein Problem...Ich kann von der Fahrerseite aus, beide Fenster steuern, aber von der Beifahrerseite aus nicht.. Den Schalter rechts hab ich...
von freac
4
556
26.03.2006, 20:00
freac
EJ9 ABS funktioniert nicht
Hallo liebe Community, ich hab einen EJ9 Facelift BJ2000. Vor längerem ist mir aufgefallen, das das ABS nix macht. Es leuchtet aber weder die ABS Lampe (ich gehe davon aus die wurde vom Vorbesitzer manipuliert...), noch kann man am OBD Stecker...
von SilverEJ9
3
194
25.08.2023, 18:02
JP_Razor
Abs funktioniert nicht
Hallo Leute, bin neu hier und habe ein Problem. Habe nix genaueres gefunden obwohl das Thema schon mehrfach diskutiert wurde, also bitte nicht böse sein :no: Fahre einen Honda Accord CC7 bj.94 Das Abs funktioniert nicht, die Lampe leuchtet! Habe...
von theman88
7
990
27.07.2010, 20:44
felline
<ref> tag funktioniert nicht
Hallo zusammen Ich arbeite erst seit ca. 3 Wochen intensiv mit Media Wiki. Alles hat wunderbar funktioniert. Jetzt habe ich ein Problem. Wenn ich eine Fussnote erzeugen will gebe ich folgenden Text ein: Dieser Text soll vor der Fussnote stehen....
von Jumpinthewater
7
383
10.06.2013, 09:05
Jumpinthewater
heizungsgebläse funktioniert nicht
hy, geht nicht? woran liegts? leuchten tut...
von SaveTheSohc
3
338
13.10.2011, 12:51
SaveTheSohc
Tacho funktioniert nicht...
hey vielleicht kann mir jemand helfen, wir haben den motor an meinem rex ausgetauscht jatzt funktioniert mein tacho nicht mehr. alles andere funktioniert also drehzahl und so weiter. Hat jemand ne idee was das sein...
von DelSolo87
1
523
29.08.2009, 21:39
Woll-E
Scheibenwischanlage funktioniert nicht
Hi meine Scheibenwischanlage funktioniert nicht, ich denke, dass der Motor hinüber ist. Meine Fragen nun sind, habt ihr vielleicht noch andere Tips und zweitens wo sitzt der Motor und ist es aufwendig diesen...
von intes
5
273
26.10.2011, 17:07
Hondadriver eg3
Heckscheibenwischer funktioniert nicht EG3
Habe ein Problem und zwar geht der Heckscheibenwischer nicht. Handbuch oder änhliches ist auch nicht vorhanden wo steht wie er überhaupt funktioniert, denn bei meinem ehem. EG4 ging der auch nicht. Bei dem weiß ich noch das da die Zahnräder nicht mehr...
von Manuel_Civic
15
378
10.01.2013, 20:56
Manuel_Civic
ZV von Beifahrertür funktioniert nicht
Hallo, ich habe meinen Honda seit nicht allzu langer zeit, ich wollte fragen, ob es normal ist, dass ich von der beifahrertür aus nicht die fahrertür aufsperren kann. die ZV funktioniert von der fahrertür aus. manchmal sperrt die beifahrertür zwar...
von ChokerJokes
17
502
27.04.2010, 18:29
CHRISguns
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |