Deutsche Zope User Group
Gast 1 Benutzer online
DZUG-News

Apache und Zope

Eine �bersetzung von http://www.zope.org/Members/regebro/Zope_and_Apache

Zope und Apache

Zope und Apache gleichzeitig zu nutzen, ist nicht so kompliziert, wie Sie denken m�gen. Jedoch wird es einem nicht leicht gemacht durch all die veralteten und unvollst�ndigen How-To�s, die verf�gbar sind. Dies ist nicht 100% vollst�ndig, aber nahe bei 99% und ich habe vor, es aktuell zu halten, so gut ich kann.

Hinweise und Ausschluss

       Dieses Dokument ist nicht g�ltig, wenn Sie EasyPublisher verwenden.

       Wenn Sie Anleitungen brauchen, wie man Zope und SSL installieren kann, k�nnen Sie dieses hier finden:

o      Zope und Apaches SSL: http://www.zope.org/Members/unfo/apache_zserver_ssl

o      Zope und SSL ohne Apache: http://www.zope.org/Members/Ioan/ZopeSSL

       Ich habe fast alles in diesem Dokument ausprobiert, aber nicht ganz. Es k�nnen Fehler geben und, wenn Sie denken, dass ich vorhabe, f�r irgend etwas verantwortlich zu sein, sind Sie im Irrtum . Ich bin v�llig unverantwortlich. Wenn Sie Fehler oder Unterlassungen finden, bitte informieren Sie mich. Ich versuche, dieses zu aktualisieren.

Dieses Dokument ist zu lang f�r mich!

Wenn Sie denken, dass Sie smart sind, und wissen, dass Sie faul sind, k�nnen Sie direkt zu den Beispielen gehen um zu sehen, ob es ein Beispiel gibt, das zu Ihnen passt, und kopieren es. Sie m�ssen den Rest des Dokuments nicht lesen, es sei denn, Sie wollen wissen, wie es nun weitergeht.

Wann sollte ich Zope hinter dem Apache betreiben?

       Sie brauchen beide, Zope basierte Sites und Nicht-Zope basierte Sites.

       Sie sind ein nerv�ser Zeitgenosse, der Zopes Zserver nicht zutraut falsche http Anfragen zu behandeln, mit denial of service attacks fertig zu werden oder Sie trauen OpenSSL nicht und m�chten lieber Apache SSL benutzen.

       Sie wollen einen Cache haben der die fertigen Seiten zwischenspeichert, um den Zugriff zu beschleunigen.

       Ihr Chef/Kunde verlangt, dass Sie Apache verwenden, und Sie wollen nicht mit ihm diskutieren.

Bitte beachten Sie, dass Sie seit Zope 2.4 den Apachen nicht mehr brauchen, um virtuelle Hosts nutzen zu k�nnen. Stattdessen unterst�tzt das so genannte "virtuelle Host-Monster" jetzt virtuelle Hosts auch mit Zope allein. Um dieses zu tun, erstellen Sie ein virtuelles Host-Monster und befolgen Sie die Anweisungen zur Ordnerzuordnungen.

Wie soll ich ausw�hlen, welchen Weg ich gehen muss?

Apache ist eine sehr flexibles Biest, so dass es Ihnen mehrere Arten anbietet, Zope dahinter zu schalten. Es gibt grunds�tzlich drei Wege:

       RewriteRules

       ProxyPass

       PCGI/FastCGI

CGI ist eine langsame und besch... Art, dies zu tun, so dass ich das nicht in diesem Dokument darstelle. Wenn Sie ganz sicher sind, dass Sie diesen veralteten, komplizierten und langsamen Weg verwenden wollen, finden Sie Anleitungen dazu hier: http://zope1.devshed.com/zope.devshed.com/Server_Side/Zope/ZopeWithApache/page1.html

Brauchen Sie Virtual Host Monster?

Sie brauchen ein virtuelles Host-Monster, wenn Sie vorhaben, mehrere Sites auf demselben Zope Server zu f�hren, oder wenn sich Ihre Site in einem Ordner befindet, nicht im URL sichtbar sein soll.

Sie haben zum Beispiel eine CMF Site erstellt die unter http://localhost:8080/CMF zug�nglich ist und Sie wollen, dass dies ohne "CMF" im URL erscheint. In diesem Fall ist der leichteste Weg ein virtuelles Host-Monster in den root-Ordner zu bringen und verwenden es, um den CMF Ordner von den Benutzern zu verstecken.

Wenn Sie nur eine Site in Ihrer Zope Installation haben und dies sich in der root von Zope befindet, brauchen Sie kein virtuelles Host-Monster.

Genauere Information �ber virtuelle Host-Monster kann man finden unter: http://www.zope.org/Documentation/Books/ZopeBook/2_6Edition/VirtualHosting.stx

Bitte beachtet das "SiteRoots", das auch verwendet werden kann, um virtuelle roots in Zope zu erstellen, veraltet ist. Verwenden Sie sie nicht, es sei denn, Sie wissen, dass Sie sie wirklich brauchen.

ProxyPass vs. RewriteRules

RewriteRules sind gebr�uchlicher als ProxyPass, weil Sie RewriteRules immer verwenden k�nnen, w�hrend es einige F�lle gibt, in denen ProxyPass nicht arbeiten wird.

ProxyPass wird verwendet, um Apachen als einen Proxy-Server zu konfigurieren. Der Proxy �bersetzt die URL, die der Apache empf�ngt- in einen anderen URL. Der Apache verbindet dann zu diesem URL (der beides sein kann, intern oder extern) holt die Daten und schickt sie dem Client zur�ck. Vom Standpunkt des Clients aus wurde die Bearbeitung der Anforderung voll vom Apacheserver geleistet, und der Client wei� nicht, dass ein anderer Server beteiligt war.

ProxyPass kann nicht nur Anforderungen umleiten, sondern kann sie auch zwischenspeichern. Dies kann den Server beschleunigen wenn Sie sehr arbeitsintensive Zope Seiten zu verarbeiten haben. Jedoch entfernt es auch einige der dynamischen Merkmale von Zope, da die meisten Anforderungen nicht von Zope, sondern vom Apachecache beantwortet werden. Es ist f�r gro�e Seiten ohne Personalisierung und niedriger Aktualisierungsgeschwindigkeiten n�tzlich. Dieses Dokument behandelt nicht wie man den Apachen als einen zwischenspeichernden Proxy einsetzen kann, sondern lesen sie dazu die Apachedokumentation auf http://www.apache.org/

RewriteRules �bernimmt kompliziertere �bersetzungen des URLs als ProxyPass. Es ist deshalb schwerer zu konfigurieren und zu verstehen, aber flexibler. RewriteRules kann auch konfiguriert werden, um die Proxy Unterst�tzung des Apachen zu verwenden (wie mit das mit Zope getan wird), so dass es alle die Merkmale von ProxyPass hat.

Ein wichtiger Unterschied zwischen ProxyPass und RewriteRules ist, wie Zope erf�hrt , welcher Hostname zu verwenden ist. Mit ProxyPass der zu benutzende Hostname� wird mit dem http Hostheader empfangen. Mit RewriteRules wird der Hostname in den URL geschrieben. Dies ist wichtig, weil Sie in einigen F�llen� den virtuelle Hostname nicht bei der ProxyPass Anweisung verwenden k�nnen und deshalb dann die RewriteRules verwenden m�ssen.

Mit Virtual Host Monster: benutze RewriteRules

1.    Zuallererst, wenn Sie ein virtuelles Host-Monster verwenden, m�ssen Sie virtual hosting sowohl im virtuellen Host-Monster als auch in Apachen konfigurieren, wenn Sie ProxyPass verwenden. Also werden Sie mit virtuellen Host-Monstern RewriteRules am ehesten verwenden.

2.    Wenn Sie virtuelles Host-Monster verwenden und Ihr Zope Server auf einem Anschluss l�uft, der nicht von der Au�enseite zug�nglich ist, m�ssen Sie RewriteRules verwenden. ProxyPass und virtuelles Host-Monster zu verwenden, funktioniert nur, wenn der Zope Server direkt zug�nglich unter dem richtigen Host-Namen ist, da der Hostname in diesem Fall �ber die http Kopfzeile �bermittelt wird. Mit RewriteRules wird er im URL �bermittelt und auf die Site kann deshalb unter jedem Host-Namen zugegriffen werden. Es ist vielleicht m�glich ProxyPass zusammen mit der Apachen- "Header" Anweisung wie dies zu verwenden:

Header set Host www.virtualhost.com

Jedoch habe ich das nicht getestet, und RewriteRules funktionieren gerade ebenso gut, obwohl sie kompliziert aussehen.

Ohne Virtual Host Monster: Benutze ProxyPass

In allen anderen F�llen ausgenommen den oben genannten k�nnen Sie entweder RewriteRules oder ProxyPass verwenden und Sie werden die viel einfacheren ProxyPass Einstellungen wahrscheinlich lieber verwenden.

Das Verwenden von ProxyPass

Um ProxyPass zu verwenden, m�ssen Sie den Apachen so konfigurieren, dass mod_proxy installiert ist. Dies ist kann dadurch erreicht werden, in dem man es statisch einkompiliert. Sie k�nnen sehen, welche statischen Module vorhanden sind durch Aufruf von "httpd-L".

Sie k�nnen das mod_proxy Modul auch als eine dynamischen Bibliothek kompilieren und es mit den folgenden httpd.conf Befehlen laden:

��� AddModule mod_proxy.c� 
����LoadModule proxy_module libexec/apache/libproxy.so'
 

Mit ProxyPass fordern Sie Apachen auf, einen Pfad zu �bersetzen und dann diese �bersetzte Anforderung als ein Proxy zu liefern. Eine typische Anweisung k�nnte wie folgt aussehen:

��� ProxyPass /Products http://remote.hostname.com:8080/dbs/products
��� ProxyPassReverse /Products http://remote.hostname.com:8080/dbs/products'
 

Dies bedeutet, wenn der Apache die Anforderung bekommt http://www.hostname.com/Products/Clavia/NM.html wird dies ge�ndert in

http://remote.hostname.com:8080/dbs/products/Clavia/NM.html und holt diesen Seiteninhalt um ihn Ihrem Browser zu �bergeben.

In einigen F�llen brauchen Sie eine ProxyPassReverse Anweisung.

Die Syntax ist genau die gleiche, aber sie liest die zur�ckgegebene Kopfzeile und �bersetzt alles r�ckw�rts z.B. von http://www.hostname.com/Products nach /Products. Dies ist haupts�chlich nur ein Problem von Umleitungen� und sogar dann werden die meisten Umleitungen wahrscheinlich. den richtigen URL benutzen.

Deshalb bekommen Sie nur selten Probleme ohne die ProxyPassReverse Anweisung.

Jedoch zerst�rt ProxyPassReverse nichts, deshalb setz es ein um sicherzugehen.

Der Gebrauch von RewriteRules

Zuallererst haben Sie Mustererkennungsregeln statt direkten Ersatz, wie ProxyPass und Sie k�nnen sich auch entscheiden, die Proxy-Funktionalit�t nicht zu verwenden (wir werden es doch).

Um RewriteRules zu verwenden, m�ssen Sie Apache so konfigurieren, dass beide, mod_rewrite und mod_proxy installiert sind. Dies kann dadurch realisiert werden, dass sie statisch einkompiliert werden. Sie k�nnen sehen, welche statischen Module existieren durch Aufruf von "httpd-L".

Sie k�nnen die mod_proxy und mod_rewrite Module auch zu dynamischen Bibliotheken kompilieren und sie mit den folgenden httpd.conf Befehlen laden:

��� AddModule mod_rewrite.c
��� AddModule mod_proxy.c
��� LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
��� LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so
 

Sie brauchen auch eine "RewriteEngine on" Anweisung in der Konfigurationsdatei.

Die vollst�ndige Referenz f�r die Anwendung von RewriteRules sind verf�gbar bei http://httpd.apache.org/docs/mod/mod_rewrite.html . Dankenswerterweise m�ssen Sie die vollst�ndige Syntax nicht verstehen, weil in Zope die Regeln normalerweise derselben Syntax entsprechen:

��� RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/
��� www.virtualdomain.com:80/www_virtualdomain_com/VirtualHostRoot/$1 [L,P] 
 

(dies sollte nat�rlich� ganz auf eine Zeile gehen, aber dann passt es nicht auf die Seite)

Wie Sie sehen, sind die Dinge, die Sie ersetzen m�ssen der www.virtualdomain.com Teil, der nat�rlich den Namen Ihres virtuellen Hosts enthalten sollte und der www_virtualdomain_com Teil, der den Standort der Site auf dem Zope Server enthalten sollte.

Dieser Teil wird vor dem Benutzer "versteckt", so dass das auf das Zope Objekt mit Namen /www_virtualdomain_com/Produkts/index_html� �ber� /Products/index_html zugegriffen wird.

Wenn Sie denken, dass RewriteRule kompliziert aussieht, dann liegen Sie v�llig richtig. Die Syntax f�r dies alles ist ziemlich verschlungen. Wenn Sie die RewriteRule Syntax lernen wollen, dann gehen Sie zu http://httpd.apache.org/docs/mod/mod_rewrite.html.

Wenn Sie mehr �ber das wissen wollen, was die VirtualHostBase und VirtualHostRoot Teile tun, dann lesen Sie die im virtuellem Host-Monsterobjekt verf�gbare Erkl�rung.

Besondere Apache Konfiguration

Nichts von dem hat tats�chlich viel mit Zope zu tun daf�r aber mit allgemeinem Apache virtual hosting aber ich nehme es dennoch hier auf, da es f�r Sie von Interesse sein kann.

Separate Protokolle f�r jeden virtuellen Host

Zopes protokolliert alles in demselben Protokoll, ohne R�cksicht auf welchen virtuellen Host zugegriffen wurde. Wenn Sie separate Protokolle f�r jeden virtuellen Host wollen, k�nnen Sie diese Apachen� stattdessen erstellen lassen. F�gen Sie Befehle wie diese in jedem VirtualHost Block:

���� ErrorLog /where/you/store/your/weblogs/www.domain.com-error_log
���� TransferLog /where/you/store/your/weblogs/www.domain.com-access_log
 

Das Setzen von REMOTE_ADDR auf den Client IP

Wenn Sie den Apachen als Proxy vor Zope verwenden, ist die REMOTE_ADDR in Zope die IP-Adresse vom Apacheserver. Diese IP-Adresse ist auch die in den Zope Zugriffsprotokollen gespeicherte Adresse. Wenn Sie die wirkliche IP-Adresse stattdessen brauchen, k�nnen Sie die ProxyVia Anweisung verwenden:

ProxyVia on

Dies funktioniert nur in Apachen1.3.2 und sp�ter. F�r fr�here Apacheversionen gibt es eine verf�gbare Programmkorrektur auf http://www.zope.org/Members/unfo/apache_zserver_ssl

In den meisten F�llen haben Sie absolut keinen Bedarf daf�r. Wenn Sie Zugriffsprotokolle mit der richtigen IP wollen, k�nnen Sie stattdessen Apacheprotokolle verwenden (siehe oben).

Beispiele

Virtual hosting mit verschiedenen Sites pro Zope Server

Dies ist die �blichste� Konfiguration. Sie f�hren Apachen und Zope auf demselben Server aus. Apache auf Anschluss 80 und Zope auf Anschluss 8080. Der Ordner

http://localhost: 8080/www_virtualdomain_com/sollte als http://www.virtualdomain.com zug�nglich sein/.

1.    Erstellen Sie ein virtuelles Host-Monster in der root von Zope� (Sie m�ssen es nicht konfigurieren).

2.    Konfigurieren Sie den VirtualHost Block in der httpd.conf� des Apachen auf www.virtualdomain.com wie hier zu sehen� (die Zeile mit dem RewriteRule und der folgenden Zeile ist in Wirklichkeit eine lange Zeile):

3.           �������
4.           �������ServerName www.virtualdomain.com
5.           �������RewriteEngine On
6.           �������RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/www.
7.           ���������virtualdomain.com:80/www_virtualdomain_com/VirtualHostRoot/$1 [L,P] 
8.           �������ErrorLog /where/you/store/your/weblogs/www.domain.com-error_log
9.           �������TransferLog /where/you/store/your/weblogs/www.domain.com-access_log
10.       �������ProxyVia on
11.       ������� 
12.        

Virtual hosting mit einer Site pro Zope Server

Sie f�hren mehrere virtuelle Hosts auf Ihren Apachen aus und Sie wollen, dass einer von diesen der Zope Server auf Anschluss 8080 ist.� Dieser Zope Server betreut nur eine Site:

���� 
���� ServerName www.virtualdomain.com
���� ProxyPass / http://localhost:8080/
���� ProxyPassReverse / http://localhost:8080/
���� ErrorLog /where/you/store/your/weblogs/www.domain.com-error_log
���� TransferLog /where/you/store/your/weblogs/www.domain.com-access_log
���� ProxyVia on
����  
 

Apache als ein Schutzproxy

Sie verwenden nur Apachen, um Ihr Zope auf irgendeine Weise zu sch�tzen. Sie verwenden keinen Apachen, um irgend etwas zu hosten. Beide, Zope und Apache sind auf demselben Server installiert. Apache auf Anschluss 80, Zope auf Anschluss 8080:

���� ProxyPass / http://localhost:8080/
���� ProxyPassReverse / http://localhost:8080/
 

Das Verwenden von Zope als Teil eines Nicht-Zope Netzes

Sie wollen alles unter /Zope auf Ihrer site von einem Zope Server auf Anschluss 8080 behandelt haben.

���� ProxyPass /Zope http://localhost:8080/
���� ProxyPassReverse /Zope http://localhost:8080/

Geschrieben von Kautz . Letzte �nderung 01.04.2003 22:10.