Caching · 3 min read · Jan 01, 2026

Caching Mit Apaches mod_cache Auf Debian Etch - Seite 2

2.2 mod_mem_cache

Die mod_mem_cache-Konfiguration befindet sich in /etc/apache2/mods-available/mem_cache.conf:

vi /etc/apache2/mods-available/mem_cache.conf   

| CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 |

Dies ist die Standardkonfiguration - wenn Sie möchten, können Sie sie ändern. Eine Liste der Konfigurationsanweisungen für mod_mem_cache finden Sie hier: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html

Jetzt aktivieren wir mod_cache und mod_mem_cache wie folgt:

a2enmod cache
a2enmod mem_cache

/etc/init.d/apache2 force-reload

Das war’s schon! Mit mod_mem_cache müssen Sie keine Cache-Verzeichnisse aufräumen.

3 Testen

Leider bietet mod_cache keine Protokollierungsfunktionen, was schlecht ist, wenn Sie wissen möchten, ob die Protokollierung funktioniert. Daher erstelle ich eine kleine PHP-Testdatei, /var/www/cachetest.php, die HTTP-Header sendet, die mod_cache mitteilen, dass die Datei 300 Sekunden lang zwischengespeichert werden soll, und die einfach den Zeitstempel ausgibt:

vi /var/www/cachetest.php

| "; ?> |

Rufen Sie nun diese Datei in einem Browser auf - sie sollte den aktuellen Zeitstempel anzeigen. Klicken Sie dann in die Adressleiste des Browsers und drücken Sie ENTER, damit die Seite erneut geladen wird (drücken Sie nicht F5 oder die Schaltfläche “Neu laden” - dies wird immer eine frische Kopie vom Server anfordern, anstatt aus dem Cache!) - wenn alles gut geht, sollten Sie immer noch den alten, zwischengespeicherten Zeitstempel sehen. Wenn Sie 300 Sekunden warten, sollten Sie eine frische Kopie vom Server anstelle des Caches erhalten.

4 HTTP-Header

Caching funktioniert nicht von Haus aus - Sie müssen Ihre Webanwendung ändern, damit das Caching funktionieren kann (es ist möglich, dass Ihre Webanwendung bereits Caching unterstützt - bitte konsultieren Sie die Dokumentation Ihrer Anwendung, um dies herauszufinden). mod_cache wird Web-Seiten nur zwischenspeichern, wenn die von Ihrer Webanwendung gesendeten HTTP-Header dies angeben.

Hier sind einige Beispiele für Header, die mod_cache nicht anweisen, zu cachen:

  • Expires-Header mit einem Datum in der Vergangenheit: “Expires: Sun, 19 Nov 1978 05:00:00 GMT”
  • Bestimmte Cache-Control-Header: “Cache-Control: no-store, no-cache, must-revalidate” oder “Cache-Control: must-revalidate, max-age=0”
  • Set-Cookie-Header: Eine Seite wird nicht zwischengespeichert, wenn ein Cookie gesetzt wird.

Wenn Sie also möchten, dass mod_cache Ihre Seiten cached, ändern Sie Ihre Anwendung so, dass solche Header nicht gesendet werden.

Wenn Sie möchten, dass mod_cache Ihre Seiten cached, können Sie einen Expires-Header mit einem Datum in der Zukunft setzen, aber der empfohlene Weg ist die Verwendung von max-age:

"Cache-Control: must-revalidate, max-age=300"

Dies teilt mod_cache mit, die Seite für 300 Sekunden (max-age) zu cachen - leider kennt mod_cache die s-maxage-Option nicht (siehe http://www.mnot.net/cache_docs/#CACHE-CONTROL), weshalb wir die max-age-Option verwenden müssen (die auch Ihrem Browser mitteilt, zu cachen - bitte beachten Sie dies, wenn Sie unerwartete Ergebnisse erhalten!). Wenn mod_cache die s-maxage-Option kennen würde, könnten wir “Cache-Control: must-revalidate, max-age=0, s-maxage=300” verwenden, was mod_cache, aber nicht dem Browser, mitteilen würde, die Seite zu cachen.

Natürlich ist dieser Header nutzlos, wenn Sie gleichzeitig einen der nicht-caching Header (Expires in der Vergangenheit, Set-Cookie usw.) aus den obigen Beispielen senden!

Ein weiterer sehr wichtiger Header für das Caching ist dieser:

"Vary: Accept-Encoding"

Dies bewirkt, dass mod_cache zwei Kopien jeder zwischengespeicherten Seite aufbewahrt, eine komprimierte (gzip) und eine unkomprimierte, sodass es die richtige Version je nach den Fähigkeiten des User-Agents/Browsers liefern kann. Einige User-Agents verstehen keine gzip-Komprimierung, sodass sie die unkomprimierte Version erhalten sollten.

Hier ist die Zusammenfassung: Verwenden Sie die folgenden beiden Header, wenn Sie möchten, dass mod_cache cached:

“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”

und stellen Sie sicher, dass keine Expires mit einem Datum in der Vergangenheit, Cookies usw. gesendet werden.

Wenn Ihre Anwendung in PHP geschrieben ist, können Sie die header()-Funktion von PHP verwenden, um HTTP-Header zu senden, z. B. so:

header(“Cache-Control: must-revalidate, max-age=300”);
header(“Vary: Accept-Encoding”);

Diese Seite ist ein Muss, wenn Sie mehr über HTTP-Header und Caching erfahren möchten: http://www.mnot.net/cache_docs/

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.