Sie sind hier:   » ZMS home » Dokumentation » Details » How-To » Betrieb » Apache mod_proxy

Caching mit Apache mod_proxy

Autor: Dr. Volker Liebenberg, 22.05.2008

Bei komplexen Abfragen oder hohem Requestvolumen verbessert ein externes Caching das Antwortzeitverhalten des Servers.
Der Apache stellt hierfür ein spezielles Modul mod_proxy zur Verfügung, das bei den 1und1-Servern bereits vorinstalliert ist und lediglich aktiviert werden muss.
D.g. die Installation der Komponenten kann, muss aber nicht auf dem gleichen Server erfolgen. Für die Konfiguration (von Apache 1.3) werden folgende Einträge benötigt:

Apache 1.3

<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyVia On
    CacheRoot "/var/cache/httpd"
    CacheSize 100000 
    CacheGcInterval 4
    CacheMaxExpire 10
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 8
   # NoCache  domain1 domain2  
</IfModule>

Die Konfiguration des VirtualHost erfolgt in der http.conf. Bei den mit confixx-Professional administrierten Systemen ist sie ausgelagert in die Datei confixx_vhost.conf. Die Pflege erfolgt über das confixx-Professional Webinterface. Sinnvollerweise wird für jeden Auftritt ein eigner Kunde angelegt, dem die Domain(s) zugeordnet werden.

<VirtualHost 217.160.211.236:80>
   ServerName web4.p15135474.pureserver.info
   ServerAlias  www.meinedomain.de.de roc-berlin.de
   DocumentRoot /home/www/web4/html
   User web4
   Group ftponly
   ScriptAlias /cgi-bin/ /home/www/web4/html/cgi-bin/
   php_admin_value open_basedir /home/www/web4/
   php_admin_value upload_tmp_dir /home/www/web4/phptmp/

   #RewriteEngine On
   #RewriteRule [s. ZMS Howto 'Apache rewrite']

</VirtualHost>

Hinweis: Der reboot des Apache erfolgt am besten mit: rcapache restart bzw. stop|start, da dann das bootscript mit allen Parametern verwendet wird.

Apache 2.0

# /etc/apache2/mods-enabled/proxy.conf #

<IfModule mod_proxy.c>
  ProxyRequests Off
  <Proxy *>
     AddDefaultCharset off
     Order deny,allow
     Deny from all
     ProxyFtpDirCharset UTF-8
   </Proxy>
  ProxyVia On
</IfModule>
# /etc/apache2/mods-enabled/disk_cache.conf #

<IfModule mod_disk_cache.c>
  CacheRoot /var/cache/apache2/mod_disk_cache
  CacheDirLevels 5
  CacheDirLength 3
</IfModule>
# /etc/apache2/sites-enabled/httpd-mySite.conf #

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

<VirtualHost *>
  ServerName      www.hermann-husen.de

  RewriteEngine   On
  RewriteRule     ...

  CacheEnable          disk /
  CacheRoot            /path-to-MySite/proxycache
  CacheDirLevels       2
  CacheDirLength       1
  CacheIgnoreNoLastMod On
  CacheDefaultExpire   3600
</VirtualHost>

ZMS-Templates

Die Modifikation von ZMS-Templates ist minimal. Es muss lediglich sichergestellt werden, dass die Seiten die für das Caching notwendigen Informationen im Header enthalten. Dies lässt sich durch Eintrag der folgenden DTML-Methoden erreichen:

<dtml-if "REQUEST.get('preview','')=='preview' or (getObjProperty('attr_cacheable', REQUEST)==0)"
   ><dtml-call "RESPONSE.setHeader('Expires', '-1')"
   ><dtml-call "RESPONSE.setHeader('Cache-Control', 'no-cache')"
   ><dtml-call "RESPONSE.setHeader('Pragma', 'no-cache')"
><dtml-else><dtml-call "RESPONSE.setHeader('Expires', _.DateTime(_.DateTime().timeTime() +  86400).toZone('GMT').rfc822())"
   ><dtml-call "RESPONSE.setHeader('Last-Modified', bobobase_modification_time().toZone('GMT').rfc822())"
   ><dtml-call "RESPONSE.setHeader('If-Modified-Since', bobobase_modification_time().toZone('GMT').rfc822())"
   ><dtml-call "RESPONSE.setHeader('Cache-Control', 'proxy-revalidate')"
></dtml-if>

Hinweis: Über getObjProperty('attr_cacheable', REQUEST) wird die ZMS-interne Angabe des Caching-Wertes berücksichtigt (sofern dieses nicht erwünscht ist, entfernt man diese Bedingung).

Die Seiten außerhalb des Preview werden wie folgt ausgezeichnet:

  1. Textdateien erhalten ein Gültigkeitsdatum von ca. einem Tag. Das bedeutet nach Download einer Seite gehen die verschiedenen Systeme (lokal Caches und Proxy-Server) davon aus, das die Datei einen Tag lang aktuell ist. Auf Anfrage wird eine Kopie der Seite ausgeliefert ohne eine neue Datei zu generieren. Dies ist erforderlich um komplexe Objekte mit geringer Zeitverzögerung ausliefern zu können.
  2. Textdateien erhalten ein Last-modified Date mit dem Zeitpunkt der letzten Änderung
  3. Der Serverseitige Proxy wird angewiesen, bei jeder Anfrage zu prüfen 'Cache-Control' 'proxy-revalidate'. Sollte sich das Expiry-Datum geändert haben, wird die Datei neu geladen. (Mozilla 'Shift'-Reload)
  4. Die Option 'If-Modified-Since' automatisiert diese Aktualisierung, funktioniert jedoch nur mit HTTP 1.1 fähigen Clients. Leider werden alle Requests derzeit noch per HTTP 1.0 verschickt.

Es wird empfohlen, ein Template "cache_config" anzulegen und es sowohl im Mastertemplate (standard_html_header) als auch im Stylesheet bzw. etwaigen Scripttemplates per "<dtml-var cache_config>" aufzurufen.
Für den preview-mode wird explizit ein caching ausserhalb von ZOME/ZMS verhindert.

Virtual Host Monster

Sollen mehrere Domains innerhalb einer ZOPE-Instanz verwaltet werden, ist ein rewriting der Anfragen erforderlich. Innerhlb von ZOPE übernehmen das die Produkte SiteAccess oder Virtual Host Monster (VHM).
Es ist einmalig im rootverzeichnis des Servers zu installieren und bedarf keiner weiteren Konfiguration. Dies erfolgt sinnvollerweise in der Apache-Konfiguration, siehe dazu ZMS Howto 'Apache rewrite'.

Mehr zum Thema: