Webseiten-Tuning mit Squid
Steuerung via Header
Die Steuerung des Caching-Verhaltens erfolgt hauptsächlich mit zwei HTTP-Headern: Cache-Control und Expires. Während Expires festlegt, bis zu welchem Datum und Uhrzeit ein Dokument maximal zwischengespeichert werden darf, definiert Cache-Control (Teil von HTTP 1.1), wie lange ein Dokument maximal zwischengespeichert werden darf. Der Vorteil von der Arbeitsweise von Cache-Control liegt darin, dass es nicht darauf angewiesen ist, dass bei den Caches die Uhr richtig geht. Dies ist vor allem dann von Bedeutung, wenn die Cache-Zeiten im Minuten- oder gar Sekunden-Bereich liegen.
Für statische Inhalte lassen sich die Caching-Perioden in der Regel über die Webserver-Konfiguration steuern. Apache bringt dazu beispielsweise das Modul
mod_expires mit, das es erlaubt, Caching-Perioden nach MIME Type zu konfigurieren. Die Direktive ExpiresByType text/html "access plus 7 days" legt beispielsweise fest, dass HTML-Dateien für 7 Tage nach dem ersten Abruf zwischengespeichert werden können. Die Header Expires und Cache-Control werden dabei von mod_expires automatisch gesetzt.
Für dynamische Webseiten ist dies natürlich nicht flexibel genug. Denn nicht jede Seite hat die gleiche Lebensdauer. Ältere Dokumente können in der Regel länger zwischengespeichert werden als neue, Übersichtsseiten kürzer als einzelne Dokumente und Suchergebnisse beispielsweise gar nicht. Deshalb sollte in diesem Fall die Konfiguration des Caching nicht nach Dateityp erfolgen, sondern pro Seite, was sich am besten in der jeweiligen Applikation erledigen lässt, indem man die Header von Hand setzt. In PHP kann dies beispielsweise mit header('Cache-Control: max-age=3600'); und header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600) . 'GMT'); erledigt werden, um Inhalte für eine Stunde (3600 Sekunden)
für die Zwischenspeicherung zu-
zulassen.
Cache vorbereiten
Mit dem Setzen der Header hat man die für das Caching nötigen Vorkehrungen seitens der Webseite vorgenommen. Nun gilt es, den Reverse Proxy vor den Webserver zu spannen, da die Webseiten sonst nur im Browser Cache landen und trotzdem für jeden Besucher ausgeliefert werden müssen.
Auch wenn Webserver in der Regel Unterstützung für die Einrichtung von Reverse Proxies mitbringen, lohnt es sich, statt dessen auf eine spezialisierte Software wie Squid zu setzen. Squid ist nicht nur auf den Betrieb als Cache ausgerichtet, sondern bringt auch eine Vielzahl an Kontrollmöglichkeiten und Clustering-Fähigkeiten mit
Squid liegt momentan in zwei Versionen vor, die von den meisten BSD- und Linux-Distributionen parallel ausgeliefert werden. Die Version 2.6 erhält nur noch Bugfixes, während die Version 3.0 die neuen Features bekommt. Die nachfolgenden Beispiele sind auf Squid 3.0 ausgerichtet – im Netz finden sich aber noch eine Vielzahl von Anleitungen für Squid 2.6.
Ob man Squid auf demselben Server wie den Webserver oder auf einer separaten Maschine installiert, hängt von der Grösse des Maschinenparks und des erwarteten Traffic ab. Bei kleinen Webseiten kann man beide Services auf demselben Server betreiben, solange man für Squid eine ordentliche Portion RAM erübrigen kann. Denn Squid profitiert von viel Arbeitsspeicher, da dort kleinere Cache-Objekte abgelegt und direkt von dort ausgeliefert werden können.