Frage
Eine Ebene höherAntwort
Damit Zope und Apache richtig zusammenspielen, muss zunächst im Zope Root Folder über das ZMI ein VHM angelegt werden. Die ID des VHM ist frei wählbar, es sollte aber nicht mehr als ein VHM angelegt werden. Ein VHM schreibt alle von Zope generierten URLs anhand von Informationen um, die ihm über spezielle URL-Pfadelemente durchgereicht wurden. Mit Hilfe von Apache rewrite Regeln können diese speziellen Elemente in die URL eingefügt werden. In den Mappings des VHM braucht nichts eingetragen zu werden. Die Mapping Option wird nur benötigt, wenn virtuelles Hosting direkt mit einem standalone-Zope umgesetzt werden soll.
Im Zope Startscript sollte der Zope Server dann mit -a 127.0.0.1 an das loopback Interface gebunden werden, damit die nachfolgenden Apache Regeln nicht mit einem direkten Aufruf über die öffentliche IP (http://129.70.34.102:8080) umgangen werden können.
Als nächstes müssen in der /etc/apache/httpd.conf des Apache die Module mod_rewrite und mod_proxy geladen werden. Das mod_rewrite Modul bietet die Möglichkeit, interne Aliase und externe Redirects auf der Basis regulärer Ausdrücke zu erzeugen. Es ist für jeden virtuellen Host explizit zu aktivieren. Das mod_proxy Modul erweitert den Apache um Proxyfunktionalitäten. Greift ein Client auf ein Objekt unterhalb der Adresse https://dzug.org zu, wird der Request intern auf http://localhost:8080/dzug/ weitergeleitet, wobei in der Adresszeile des Browsers die eingangs durch den Client angeforderte Adresse zu sehen ist, und der Client somit nicht merkt, dass seine Seiten in Wahrheit von dem lokal laufenden Zope ausgeliefert werden. Die entsprechenden Einträge in die /etc/apache/httpd.conf:
LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so LoadModule proxy_module /usr/lib/apache/1.3/libproxy.soEin namenbasierter virtualer Host könnte z.B. so aussehen:
NameVirtualHost 129.70.34.102:80
Die NameVirtualHost Anweisung konfiguriert eine IP zur Benutzung für (mehrere) virtuelle Server. Damit beim Start des Apaches keine DNS-Abfragen gemacht werden müssen, sollten in der NameVirtualHost-Anweisung ausschließlich IP-Adressen verwendet werden.
Um dem VHM mitzuteilen, dass es das Protokoll auf HTTP und den Host auf dzug.org setzen soll, fügen wir über die rewrite Rules ein �VirtualHostBase�, das Protokoll und den Host in den URL-Pfad ein. Durch den �VirtualHostBase�-Zusatz weiß das VHM, dass es überhaupt in Aktion treten soll. Indem wir ein �VirtualHostRoot� direkt nach dem /dzug Ordnernamen einfügen, behandelt das VHM den /dzug Ordner als root Folder des virtuellen Hosts. Um also den im /dzug Folder liegenden Content nach außen über dzug.org zur Verfügung zu stellen, verwenden wir diese Zeilen in der /etc/apache/httpd.conf:
ServerName dzug.org ServerAlias dzug.org RewriteEngine On RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/\ http/dzug.org:80/dzug/VirtualHostRoot/$1 [P] [...]
Den \ (Backslash) am Ende der Zeilen braucht man nur, wenn in der Config an dieser Stelle auch ein Zeilenumbruch ist!
Wenn der Apache jetzt einen zweiten virtuellen Server unter derselben IP beheimaten soll, fügt man einfache folgende Zeilen hinzu:
ServerName jura.uni-bielefeld.de [...]Das obige RewriteRule-Beispiel lässt sich auch mit dem mod_proxy Modul umsetzen:
ProxyPass / http://localhost:8080/VirtualHostBase/\ http/zope.dzug.org:80/VirtualHostRoot/ ProxyPassReverse / http://localhost:8080/VirtualHostBase/\ http/zope.dzug.org:80/VirtualHostRoot/
Dadurch dass wir den Zope mit �a 127.0.0.1 an das lokale loopback gebunden haben und https://dzug.org/manage durch den obigen virtuellen Hosts /dzug/manage/ bedeutet, haben wir keinen externen Zugriff mehr auf den Zope root Ordner im ZMI. Wir richten uns also noch einen virtuellen Host unter der Subdomain zope.dzug.org ein, der uns wieder einen uneingeschränkten ZMI-Zugang verschafft:
ServerName zope.dzug.org RewriteEngine On RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/\ http/zope.dzug.org:80/VirtualHostRoot/$1 [P] [...]
Wesentlicher Unterschied zum obigen Beispiel ist, dass zwischen �zope.dzug.org:80� und �VirtualHostRoot� kein Ordnernamen eingefügt wurde und damit der ZMI root Ordner zum root Ordner des virtuellen Hosts wird.
Zu beachten ist, dass ab Apache 1.3.x die Cachingfunktionen aus dem Modul mod_proxy herausgenommen und in ein neues Modul (mod_cache) integriert wurden. Wem es also explizit auf Proxy-Cache (Webcache) ankommt, sollte sich näher mit dem mod_cache Modul oder Squid beschäftigen.
Siehe auch FAQs:- Apache vs. Medusa
- Pound und Zope
- SSL Verschlüsselung mit Apache
Anregungen zu dieser FAQ bitte an mschopen at dzug org