Freitag, 10. Oktober 2008

lighttpd mit mod_mem_cache (statische Dateien cachen)

Oftmals sind die Festplatten ein Flaschenhals, gerade bei Bildservern. Nehmen wir an wir hosten dort nun viele normal-große Bilder und zu jedem Bild ein kleines Vorschaubild. Diese eigenen sich hervorragend um im Arbeitsspeicher gecached zu werden, da sie sehr klein sind und in der Regel die meisten Festplattenzugriffe verursachen.

Das third Party Modul "mod_mem_cache" für lighttpd eignet sich bestens um statischen Content zu cachen.

Zu erst einmal den aktuellen lighttpd installieren (jetzt grad 1.4.20):

www.lighttpd.net

laden, entpacken, ins Verzeichnis wechseln

dann den Patch laden: http://blog.quehy.com/tag/mod_mem_cache

wget http://blog.quehy.com/doc/lighttpd-1.4.19.mod_mem_cache.patch
patch -p0 [spitze Klammer auf] lighttpd-1.4.19.mod_mem_cache.patch
sh autogen.sh
(./configure --help)
./configure --without-mysql --without-bzip2 --without-gdbm
make
make install


sollte lighttpd schon installiert sein, muss der webserver vorher gestoppt werden. im entpackten verzeichnis (sofern nicht frisch entpackt) einmal "make clean" ausführen. danach die anderen Schritte wie schon geschrieben.

Auf die Konfiguration von lighttpd geh ich jetzt nicht ein. Infos dazu gibts auf www.lighttpd.net ... es ist im Grunde auch recht simpel.

Nun müssen wir der Konfigurationsdatei aber noch die Parameter fürs Modul mitteilen.

mem-cache.enable = "enable"
mem-cache.max-memory = 1024 #nutze bis zu 1GB Arbeitsspeicher)
mem-cache.max-file-size = 7 #Cache Dateien die maximal 7kb groß sind (nur Vorschaubilder)
mem-cache.expire-time = 480 #gecachte Dateien sind 8 Stunden gültig
mem-cache.filetypes=("image/jpeg") #Nur jpeg Grafiken cachen (Damit PHP Dateien, weiterhin ausgeführz werden)


"mod_mem_cache" eventuell noch bei den "server.modules" eintragen und zack es sollte funktionieren.

Quellen:
www.lighttpd.net
http://blog.quehy.com/tag/mod_mem_cache

Probleme:
kommt es nach autogen.sh zu einer Fehlermeldung wie "configure.in:70: error: possibly undefined macro: AC_DEFINE", dann muss "fam-devel" (bzw. libfam-dev) installiert werden.