Lighttpd & mod_expire

Ayant récemment mis en place un serveur “statique” avec lighttpd (prononcé lighty) chargé de délivrer uniquement les images de divers sites web et newsletters, j’ai eu envie comme à mon habitude avec apache ou nginx d’optimiser les performances.

Comment ? Grâce à mod_expire entre autre (qui au passage existe et porte le même nom sur apache).

Pour être bref, mod_expire permet d’informer le navigateur du client que le contenu délivré est valable pendant une durée définie. Tant que la durée n’est pas expirée, le navigateur ne re-télécharge pas le contenu et utilise celui qu’il a dans son cache. Cela épargne donc une requête HTTP par contenu non re-téléchargé.

Côté client l’affichage est plus rapide car le contenu sera lu instantanément via le cache de son navigateur.

Pour l’activer sur lighty, ajoutez le à la liste des modules chargés dans votre fichier lighttpd.conf :

server.modules
= (
...
 "mod_expire",
...
 )

Dans ce même fichier, ou dans un fichier externe (n’oublier pas de l’inclure) il vous faudra ajouter vos règles d’expirations (durée de la mise en cache) :

# <access|modification> plus <number> <years|months|days|hours|minutes|seconds>
$HTTP["url"] =~ "\.(jpg|gif|png|css|js)$" {
    expire.url = ( "" => "access 15 days" )
}

Si vous ne faite pas de répartition de charge entre différents serveurs délivrant le même contenu statique, ajoutez des ETAG dans l’entête HTTP :

# ETags
etag.use-inode = "enable"
etag.use-mtime = "enable"
etag.use-size = "enable"
static-file.etags = "enable"

Pour plus d’informations à ce sujet n’hésitez-pas à consulter l’article Désactiver les ETags ? de l’excellent blog d’Éric Daspet dédié à la performance web