Apache
Configurer un cache
Le système de cache d'Apache peut considérer son contenu comme étant dans un de ces trois états:
- Frais : Nouveau contenu qu'il n'y a pas besoin de vérifier
- Stale : Contenu expiré selon les règles établies, et qu'il faut vérifier.
- Non-Existent : Contenu disparu.
Quand il reçoit une requête, il regarde le TTL; si le TTL est expiré, Apache ira rechercher le contenu. Si le contenu a changé, on le récupère. Sinon, on laisse ce qu'on a en cache.
Apache utilise mod_cache pour évaluer le TTL et déterminer quoi faire. Il requiert mod_cache_disk pour stocker des données sur le disque.
Placement du cache
Il faut déterminer si le cache est devant ou derrière le serveur. Cela se configure avec CacheQuickHandler.
- Devant:CacheQuickHandler est On. Le cache sera consulté avant de consulter Apache. C'est la méthode la plus rapide, mais la moins sécurisée : tout le contenu est mis devant le serveur et il n'y a aucune authentification.
C'est la méthode par défaut.
- Derrière:CacheQuickHandler est Off. La requête passera par Apache avant de regarder le cache. Ce n'est pas aussi rapide, mais plus sécurisé. C'est la méthode que je vais choisir.
Configuration
https://httpd.apache.org/docs/current/mod/mod_cache.html
Install: <source> sudo apt-get update sudo apt-get install apache2-utils </source>
Activation des mods: <source> sudo a2enmod cache sudo a2enmod cache_disk sudo a2enmod expires #Permet de contrôler l'en-tête HTTP Expires et max-age sudo a2enmod headers </source>
Puis restart d'Apache2.
Puis nous allons configurer le VHost. Il s'agit d'une configuration basique, qui mets le cache sur une expiration de 5 minutes, il y'a beaucoup de confs possibles.
Il vaut mieux configurer VHost par VHost.
J'ajoute ça dans mon vhost : <source> CacheQuickHandler off CacheLock on CacheLockPath /tmp/mod_cache-lock CacheLockMaxAge 5 CacheIgnoreHeaders Set-Cookie
<Location />
CacheEnable disk CacheHeader on CacheDefaultExpire 800 CacheMaxExpire 64000 CacheIgnoreNoLastMod On ExpiresActive on ExpiresDefault A300
</Location> </source>
- CacheEnable : active le cache disque. Le principe est d'utiliser le système de caching de l'OS pour accéder rapidement aux fichiers. Je ne comprends pas en quoi c'est plus rapide, mais visiblement ça l'est.
- CacheHeader : ajoute un Header X-Cache à la réponse HTTP.
- CacheDefaultExpire : Date d'expiration par défaut du cache en secondes.
- CacheMaxExpire : Temps maximum d'expiration
- CacheIgnoreNoLastMod : Permet de mettre en cache les documents qui n'ont pas de date de dernière modification.
- ExpiresActive : Permet d'activer les en-tête "expires".
- ExpiresDefault : Mode de calcul de la date d'expiration.
Puis je teste avec <source> sudo apachectl configtest </source>
Si je n'ai pas d'erreurs, je restarte apache2. Ça marche.
Vérification
Je peux vérifier que le cache est bien en train de fonctionner (après y avoir navigué un peu) avec : <source> ls -la /var/cache/apache2/mod_cache_disk/ </source>
Mise en cache mémoire ?
Visiblement, la mise en cache mémoire peut se faire par l'utilisation du mod socache_memcache et l'utilisation d'un fournisseur comme memcached.
Donc c'est possible, mais l'intérêt m'échappe par rapport à un proxy comme varnish : il faut alors installer memcached.
Ça n'as pas l'air trop complexe, cela dit : https://www.dsfc.net/oss/apache/apache-cache-memcached-socache-wordpress/