De:ReverseProxy
Inhaltsverzeichnis
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