De:ReverseProxy

Aus YaCyWiki
Wechseln zu: Navigation, Suche

Zweck

Mit einem Reverse Proxy kann man "fremde" Seiteninhalte in den Namensraum der eigenen Domain einbinden. Konkret heißt das, dass man z.B. unter http://yacy.example.com/myfirstpeer/ den Inhalt von http://mypeer.dyndns.org:8090 sehen kann. Dadurch kann die Weboberfläche von YaCy beispielsweise nahtlos in eine bestehende Webanwendung oder ein Portal eingebunden werden (in Zusammenhang mit Skins) oder der eigene Peer kann auch dann gesteuert werden, wenn man an einem Internetzugang sitzt, der den ausgehenden Verkehr auf die Standardports 80 und 443 beschränkt. Achtung: Es ist zur Zeit nicht möglich auch die Kommunikation zwischen den YaCy-Peers so umzuleiten.

Vorraussetzungen

  • Apache 2
  • mod_proxy
  • mod_proxy_html

Apache2 und mod_proxy sollten in jeder Linuxdistribution vorhanden sein. mod_proxy_html ist zumindest unter Debian Sarge auch über den Paketmanager verfügbar. Ich gehe im folgenden von einer Debian Sarge Installation aus. Die Anweisungen sollten sich auf alle Distributionen übertragen lassen, wobei eventuell die Namen der Konfigurationsdateien anzupassen sind.

Konfiguration

Module laden

Mit a2enmod proxy und a2enmod proxy_html werden die beiden benötigten Module aktiviert. Die Datei /etc/apache2/mods-available/proxy.load sollte folgenden Inhalt haben:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

Die Datei /etc/apache2/mods-available/proxy_html.load sollte so aussehen:

LoadFile /usr/lib/libxml2.so.2
LoadModule proxy_html_module /usr/lib/apache2/modules/mod_proxy_html.so

mod_proxy konfigurieren

In /etc/apache2/mods-available/proxy.conf sollten folgende Zeilen aktiv sein:

<IfModule mod_proxy.c>
       ProxyRequests Off
       ProxyVia On
</IfModule>

Hier ist es insbesondere wichtig, dass die Zugriffsbeschränkung (zwischen <proxy> und </proxy>) und das Caching entfernt oder auskommentiert werden.

Reverse Proxy

Die eigentliche Konfiguration habe ich in einem virtual Host vorgenommen. ProxyPass erledigt die eigentlich Weiterleitung. D.h. alle Anfragen an http://yacy.example.com/myfirstpeer/ werden an http://mypeer.dyndns.org:8090/ weitergeleitet. ProxyPassReverse sorgt dafür, dass in allen HTTP-Headern jedes Vorkommen von http://mypeer.dyndns.org:8090/ durch http://yacy.example.com/myfirstpeer/ ersetzt wird. Mit SetOuputFilter proxy-html wird das Module mod_proxy_html eingebunden. ProxyHTMLURLMap nimmt die Ersetzungen der URLs in den HTML-Dokumenten vor, damit interne Links funktionieren und Grafiken, Style-Sheets und Scripte korrekt eingebunden werden können. RequestHeader unset Accept-Encoding sorgt dafür, dass die gzip-Kompression ausgeschaltet wird, da sonst das URL-Ersetzen nicht funktioniert. Hier jetzt also die Konfiguration für einen virtual Host und zwei Peers:

<VirtualHost *>
       ServerAdmin webmaster@example.com
       ServerName yacy.example.com
       DocumentRoot /var/www/yacy/
       SetOutputFilter proxy-html
       #ProxyHTMLLogVerbose On
       ProxyHTMLExtended On
       ProxyPass /myfirstpeer http://mypeer.dyndns.org:8090/
       ProxyHTMLURLMap http://mypeer.dyndns.org:8090 /myfirstpeer
       <Location /myfirstpeer/>
               ProxyPassReverse /
               ProxyHTMLURLMap / /myfirstpeer/
               ProxyHTMLURLMap /myfirstpeer /myfirstpeer
               RequestHeader    unset  Accept-Encoding
       </Location>
       ProxyPass /mysecondpeer http://mypeer.dyndns.org:8091/
       ProxyHTMLURLMap http://mypeer.dyndns.org:8091 /mysecondpeer
       <Location /mysecondpeer/>
               ProxyPassReverse /
               ProxyHTMLURLMap / /mysecondpeer/
               ProxyHTMLURLMap /mysecondpeer /mysecondpeer
               RequestHeader    unset  Accept-Encoding
       </Location>
</VirtualHost>


TODO

  • Rewrite der Adressen in Stylesheets und Javascripten


Weblinks