Apache Cache Funktionen

mod_cache

Um das Cacheing beim Apache zu aktivieren, muss man zum einen das allgemeine Cacheing Modul „mod_cache“ laden und dann eins für die Cacheing Methode welche man verwenden möchte. Also entweder „mod_disk_cache“ oder „mod_mem_cache“, wobei es auch geht beide zu laden. Es kommt eben immer darauf an wie man Cachen möchte. Entweder nur im RAM, oder nur auf der Festplatte, oder ein gemisch aus beiden. Eingebunden werden die Module über das Kommando „LoadModule Modulname Modul“. Für Cacheing würde das so aussehen:

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so

In dem Zusammenhang ist es auch immer gut noch die Module für HTTP-Header und Expire-Steuerung zu aktivieren. Da auf diese beim Cacheing zurückgeriffen wird. Also zusätzlich dann noch:

LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so

All dies wird in die httpd.conf (evtl. auch apache2.conf) eingefügt. Nach einem Neustart des Apache sind die Module dann auch verfügbar. Hier nun die Allgemeinen Optionen für „mod_cache“:

CacheEnable disk /“ aktiviert das Caching. „disk“ besagt hierbei das „mod_disk_cache“ benutzt wird und nicht „mod_mem_cache“. Das Slash besagt, das alles ab dem Domain-Root gecached werden soll. Also alles z.B. ab http://www.domain.tld/ . Man könnte also auch sagen, wenn man nur Teilbereiche seiner Website cachen will, das nur http://www.domain.tdl/archive/ gecached werden soll. Dies würde man mit „CacheEnable disk /archive/“ erreichen. Will man mod_mem_cache ansprechen muss man die Option entsprehende umformulieren: „CacheEnable mem /sites“. So wird alles unterhalb von domain.tld/sites/ in durch den Mem- Cache abgedeckt.

CacheDisable“ kann das Caching für angegebene Domain.Pfade deaktivieren. Bsp.: „CacheDisable /sites/intern“.

CacheDefaultExpire“ legt die Zeit für ein Dokument ohne Gültigkeitsdauer fest, bevor es verfällt. Also wenn eine Dokumente keinen „Expires“-Header hat. Der Standard-Wert liegt bei einer Stunde. Die Zeit wird in Sekunden angegeben.

CacheIgnoreCacheControl“, ist diese Option gesetzt ignoriert Apache den „CacheControl“-Header des angeforderten Objektes und legt es trotzdem in den Cache, auch wenn „CacheControl: no-cache“ gesetzt ist.

CacheIgnoreNoLastMod“ wird gesetzt wenn man ein Dokument ohne „Last-Modified“-Header hat, dies aber trotzdem in den Cache legen möchte. Der „Last-Modified“-Wert wird dann auf die aktuelle Zeit + den Wert von „CacheDefaultExpire“ gesetzt.

CacheLastModifiedFactor“ legt das Verfallsdatum anhand von LastModified-Headers fest, wenn kein Expires- Header gesetzt ist. Dazu wird die aktuelle Zeit genommen, dann nachgeschaut, wie lange das Dokument schon nicht verändert wurde und dies dann mit dem Faktor multipliziert. Daraus ergibt sich zum Bsp. Bei einer seit 20h nicht mehr veränderten Datei und einen Faktor von „0,1“ eine Verfallszeit von zwei Stunden.

CacheMaxExpire“ definiert wie lange ein Dokument ohne Prüfung aus dem Cache ausgeliefert wird. Ist die Zeit abgelaufen, wird es aus dem Cache genommen, selbst wenn der „Expires“-Header etwas anderes besagt.

mod_disk_cache

Will man nun für einen bestimmten Vhost das Disk-Caching aktivieren (gesamte Domain), muss man in dessen <VirtualHost>-Tag folgendes einfügen:

CacheEnable        disk /
CacheRoot            /var/cache/apache2/VHOSTname
CacheSize             307200
CacheDirLevels   3
CacheDirLength 2
CacheMaxFileSize   2097152
CacheMinFileSize    1024

CacheRoot“ gibt an, wo auf der Festplatte das Verzeichnis liegt, in welchem Apache seine Cache-Dateien ablegent. Dieses Verzeichnis muss schon existieren, der Webserver wird es nicht selbst anlegen. Deshalb sollte man darauf achten, das auch die richten Zugriffsrechte gesetzt sind. Dieses Kommando gilt nur für „mod_disk_cache“.

CacheDirLevels“ legt die Tiefe fest, bis zu welcher Ordner für Cache-Dateien angelegt werden sollen.

CacheDirLength“ legt die Länge der Ordnernamen fest, in welchen die Cache-Dateien gespeichert werden. Die beiden Direktiven dienen zur Verwaltung der Cache-Dateien. So wird die Ordner Hierarchie festgelegt. So kann man die Größe des Cache regulieren und durch schlanke Verzeichnisstrukturen die Zugriffszeiten steigern. Dabei ist noch zu beachten, das CacheDirLevels * CacheDirLength < 20 sein sollte. Sollte dies nicht beachtet werden kommt es zu Instabilitäten oder sogar abstürzen des Apache.

CacheMaxFileSize“ legt die maximale Größe einer Datei fest, welche in den Cache aufgenommen werden soll. Überschreitet eine Datei diese Größe wird sie nicht gecached. Im Bsp. Wird die max. Größe auf 2 MiB festgelegt.

CacheMaxFileSize“ legt entgegen zu CacheMaxFileSize die minimal Größe einer Datei fest, welche in den Cache aufgenommen werden soll. Unterschreiten Dateien diese Größe, werden sie ebenfalls nicht gecached. Im Bsp. Wird die min. Größe auf 100 KiB festgelegt

CacheSize“ legt einfach die Maximale Größe des gesamten Cache fest, der auf der Festplatte gespeichert werden soll. Läuft der Cache über, wird er durch das löschen der ältesten Dateien wieder auf seine maximal erlaubte Größe verkleinert. „mod_disk_cache“ hat dazu eine eigene Garbage-Collection-Funktion. Dabei wird auf das externe, aber zu Apache gehörende Tool „htcacheclean“ zurückgegriffen. Dieses Tool kann man auch selbst anstoßen oder durch Cronjobs zyklisch laufen lassen.

mod_mem_cache

Im Gegensatz zu mod_disk_cache, speichert „mod_mem_cache“ wie der Name schon sagt, die zu cachenden Inhalte im RAM des Servers. Auch sind hier wieder Angaben pro Vhost möglich. Für „mod_mem_cache“ gibt es 6 Optionen, die im Folgenden erläutert werden.

MCacheSzie“ legt die Maximale Größe des Cache im RAM fest. Man sollte sie nicht allzu groß wählen, außer man hat genügend Hauptspeicher. Standardmäßig steht dies Option auf 100 KiB.

MCacheMaxObjectCount“ legt die maximale Anzahl der Objekte im Speicher fest. Wird die Grenze erreicht, werden Objekte anhand der Option „MCacheRemovalAlgorithm“ entfernt.

MCacheMaxObjectSize“ legt wie der Name schon sagt, die max. Größe eines Objektes fest. Sie entspricht der Option „CacheMaxFileSize“.

MCacheMinObjectSize“ ist das Gegenteil der vorherigen Option und legt die minimale Größe eines Dokuments fest, welches im Speicher abgelegt werden darf. Es ist das Äquivalent zu „CacheMinFileSize

MCacheMaxStreamingBuffer“ legt den max. Buffer für Streaming-Antworten fest. Bei Streaming-Objekten ist die Gesamtgröße vorher nicht bekannt. Daher kann die Prüfung von „MCacheMaxObjectSize“ nicht stattfinden. Daher wird soviel wie „MCacheMaxStreamingBuffer“ festlegt, gepuffert und daran dann entschieden ob das Objekt zu groß ist für den Cache oder nicht. Wird diese Option nicht gesetzt, wird der Wert von MCacheSzie“ genommen. Aber dann nur ungefähr 98% davon.

McacheRemovalAlgorithm“ bestimmt nach welchen Verfahren die Objekte aus dem Speicher entfernt werden. Dabei gibt es zwei Optionen. Einmal LRU und zum anderen GDSF. LRU beduetet hierbei Last Recently Used. Wie der Name schon vermuten lässt, werden so dann die am längsten nicht benutzen Objekte aus dem Cache entfernt. Bei GDSF, was Greedy-Dual-Size-Frequency heißt, werden die Objekte priorisiert. Die Priorisierung wird daran festgelegt wie Aufwändig eine Neu-Anfrage wäre und wie groß das Objekt ist. Objekte mit niedriger Priorität werden dann aus dem Cache entfernt.