Umleitung mit mod_proxy

Nemesis

Nemesis

N3RD
hi,
mein apache stellt eine seite im internet bereit, nun möchte ich gerne, dass beim aufruf einer unterseite der apache als eine art proxy fungiert und von einem weiteren server im selben netzwerk die seite ausliefert.

http://192.168.0.211 -> Apache liefert eigene Seite aus
http://192.168.0.211/newone -> Apache fungiert als Proxy und liefert die Seite, die er von einer anderen Adresse holt, aus.

das sollte eigentlich mit mod_proxy funktionieren, aber ich komme immer bei http://192.168.0.211/http/start raus, und dort sagt er, dass die files nicht existieren.

was läuft da falsch ?

danke !
 
Zeig mal deine Configs die du diesbezüglich angelegt hast.
 
das ist die proxy.conf
Code:
<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

 #       <Proxy *>
 #              AddDefaultCharset off
 #              Order allow,deny
 #              Allow from all
 #              Allow from .example.com
 #       </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On

        ProxyPass /ONE http://192.168.0.X
        ProxyPassReverse /ONE http://192.168.0.X

        ProxyPass /TWO http://192.168.0.Y
        ProxyPassReverse /TWO http://192.168.0.Y
</IfModule>

bei der ersten funktioniert es auch, nur bei der 2ten nicht. Ich denke es müssten alle Anfragen an Adressen die unterhalb von http://192.168.0.Y/ liegen nicht an /TWO/ gestellt werden sondern auch an http://192.168.0.Y/ und das ergebnis dann ausgeliefert.
also in etwa wie wenn ich für jede adresse noch einen eintrag machen würde ala:
Code:
       ProxyPass /TWO/http/ http://192.168.0.Y/http
        ProxyPassReverse /TWO/http/ http://192.168.0.Y/http

       ProxyPass /TWO/http/start http://192.168.0.Y/http/start
        ProxyPassReverse /TWO/http/start http://192.168.0.Y/http/start

aber lässt sich das nicht über eine regel automatisieren ?

hier nochmal das prinzip:

Code:
                                  +-------+
                                  |ServerA|
                                  +-------+
                                 /
+----------+    +---------------+
| Internet +----+ Reverse Proxy | 
+----------+    +---------------+
                                 \
                                  +-------+
                                  |ServerB|
                                  +-------+
 
Zuletzt bearbeitet:
Hi,

verstehe ich dich da richtig, auch alle Anfragen die an das www-root (/) gehen werden nach /TWO geleitet?
 
nein, nicht an das root, anfragen die an http://<zensiert>/ONE gehen werden umgeleitet. wobei umgeleitet auch nicht der richtige ausdruck ist, da der apache hier als reverse-proxy dienen soll. der apache holt sich dann die auszuliefernde seite von dem gerät das gewünscht ist, in diesem fall wäre es ONE.
Ich möchte eben Weboberflächen verschiedener Geräte über eine Adresse für die Remoteverwaltung zur Verfügung stellen.

ich denke es liegt an absoluten pfadangaben ... im apache-log stehen einträge dass er im root nach verschiedenen cgi-sscripten sucht.

hier sucht er:
http://<zensiert>/cgi-scripts/

und hier liegen die scripte:
http://<zensiert>/ONE/cgi-scripts/

hm, eventuell lässt sich da was mit mod-rewrite umbiegen, nur steige ich da nicht ganz hinter die syntax ... is vielleicht auch schon zu spät am abend ;)

mfg
 
Zuletzt bearbeitet:
an deiner stelle würde ihc mir mal "location", "location match" ansehen.
Allerdings bin ich mir gerade nicht sicher ob man in den Directiven proxy_pass verwenden kann... mussu ausprobieren. Falls das nicht klappen sollte, musst du das wie du schon erwähnt hast mit mod_rewrite arbeiten

aber ich verstehe sowiso nicht den sinn hinter deiner architektur.
was du da aufgemalt hast, ist ein klassischer mod_proxy load balancer ....

nunja :>
 
die location-tags sind nur dazu da um die sache etwas übersichtlicher zu gestalten.

anstatt
Code:
ProxyPass /ONE [url]http://192.168.0.X[/url]
ProxyPassReverse /ONE [url]http://192.168.0.X[/url]
wäre das dann
Code:
<location /ONE/>
ProxyPass [url]http://192.168.0.X[/url]
ProxyPassReverse [url]http://192.168.0.X[/url]
</location>
zum thema load-balancer ... wenn das 2x der gleiche server wäre, dann würde das ja passen, denn ein load-balancer verteilt den traffic gleichmäßig auf verschiedene Server.
Nicht das was ich suche.

::EDIT::

so, ich bin einen Schritt weiter gekommen ...
Code:
ProxyPass /ONE http://192.168.0.X/
ProxyHTMLURLMap / /ONE/
ProxyHTMLExtended On
RequestHeader unset Accept-Encoding
macht fast das was ich gerne hätte, es setzt / nach /ONE/ ... aber es setzt auch vor jeden unterordner ein /ONE, sprich:
wenn http://<zensiert>/ONE eingegeben wird, dann wäre http://<zensiert>/ONE/http/index.html richtig, aber http://<zensiert>/ONE/http/ONE/index.html kommt dann dabei raus.
 
Zuletzt bearbeitet:
Code:
<VirtualHost *:80>
        ServerName www.example.de # servera
        ProxyRequests On
        ProxyVia On

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyPass /seite2 http://serverb.example.de
        ProxyPassReverse /seite2 http://serverb.example.de
</VirtualHost>

der aufruf von www.example.de/seite2 sollte die seite von serverb öffnen

bei mir klappt das genauso

linux apache ist im netz erreichbar und liefert über eine adresse ein webinterface von einem lokalen gerät aus.
 
der aufruf von www.example.de/seite2 sollte die seite von serverb öffnen

bei mir klappt das genauso

linux apache ist im netz erreichbar und liefert über eine adresse ein webinterface von einem lokalen gerät aus.

bei mir klappt das auch, nur die links in den html-files werden nicht richtig aufgelöst, so sucht er nach machen bildern im root des apachen (unter /) und nicht unter dem verzeichnis in dem sie eigentlich sind (/ONE/)

achja, ich würde das Proxyrequest deaktivieren ;)

::EDIT::

Hier steht beschrieben, dass das mit der Directive
Code:
ProxyHTMLURLMap /           /ONE/
eigentlich funktionieren sollte ... eigentlich ... aber er läd das Modul anscheinen nicht richtig, im log taucht flgendes auf:
Code:
Invalid command 'ProxyHTMLEnable', perhaps misspelled or defined by a module not included in the server configuration

obwohl:
Code:
Which module(s) do you want to enable (wildcards ok)?
proxy_html           
Module proxy_html already enabled
 
Zuletzt bearbeitet:
danke für den tipp :D

vllt liegt es an der programmierung der webseite?
oder in der vhost config?
document root usw.

ich werde bei mir mal eine normale php webseite umleiten lassen, mal gucken ob die pfade dann stimmen.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

so ... ich habe mich ein wenig mal mit dem thema beschäftigt :D

Code:
ProxyHTMLURLMap http://seite2.example.de /subfolder
bei mir werden jetzt alle links schön umgeschrieben, die css dateien werden gefunden, usw :D

ABER:
dafür musste ich nicht nur proxy_html aktivieren (war zwar schon, aber egal), nein ich musste auch noch was neues installieren. leider nicht aus den repos.

apache-(prefork|worker)-dev eines von beiden, je nachdem was installiert ist

mod_xml2enc
mod_xml2enc.h
mod_xml2enc.c

beide dateien in /usr/local/src/mod_xml2enc/ ablegen

die pfade stammen aus debian lenny
Code:
cd /usr/sbin/ #der ort an dem die apach2/httpd datei liegt
apxs2 -aic -I/usr/include/libxml2/ /usr/local/src/mod_xml2enc/mod_xml2enc.c

unter umständen muss noch mod_proxy.html in /usr/local/src/ entpackt werden (ordner wird erstellt)

/etc/apache/mods_available/xml2enc.load
Code:
LoadFile /usr/lib/libxml2.so
LoadModule xml2enc_module /usr/lib/apache2/modules/mod_xml2enc.so

und dann einfach neustarten :D

Quelle:
http://apache.webthing.com/mod_proxy_html/
http://www.outsidethe.net/2009/11/17/building-and-installing-mod_proxy_html-and-mod_xml2enc
 
Zuletzt bearbeitet:
es ging dann doch ohne das rumgefrikkel:
Code:
ProxyPass /http/ http://<zensiert>/http/
ProxyPassReverse /http/ http://<zensiert>/http/
ProxyHTMLURLMap http://<zensiert>/http /http/
<Location /http/>
                ProxyPassReverse /
   SetOutputFilter  proxy-html
   ProxyHTMLURLMap / /http/
   ProxyHTMLURLMap  /http/ /http/
        RequestHeader    unset  Accept-Encoding
</Location>
 
dann war bei dir das schon "eingebaut" .. bei mir unter lenny nicht. hat was mit der proxy_html version zu tun
 

Ähnliche Themen

Squid3 als Reverse Proxy

dhcp, arpwatch, flip-flop, iPhone

Squid als RPCoHTTPS Proxy für Outlook Anywhere

apache2 und mod_proxy

Web-Weiterleitung zu anderem Webserver

Zurück
Oben