← évolutif
420-5A4-MT · Module 2 · Semaine 6 · Guide technique

Les caches d'exécution :
OPcache, APCu, Memcached, mod_cache

Varnish sert des pages toutes prêtes. Les caches de cette page accélèrent les pages qu'il FAUT générer : le code qui compile moins, les objets qui restent en mémoire, les requêtes qu'on ne repose pas.

0 · La carte avant la route

Cache Il vit où ? Il garde quoi ? Il brille quand...
Varnish Devant le serveur web (sa machine ou la même) Des réponses HTTP complètes ...la même page est demandée par tout le monde.
mod_cache Dans Apache Des réponses HTTP ...on veut un cache HTTP sans machine de plus.
OPcache Dans PHP Le bytecode compilé des scripts ...toujours : chaque page PHP en profite.
APCu Dans PHP (local à la machine) Des objets et variables ...une seule machine web génère des pages personnalisées.
Memcached Service en RAM (même ordinateur ou machine dédiée) Objets, sessions, résultats de requêtes ...plusieurs serveurs web partagent le même cache.
Règle du cours : le cache HTTP court-circuite l'exécution; le cache d'exécution la rend moins chère. Un site occupé veut les deux.
Contexte Client Cornucopia

Cornucopia · Application Pratique sur le Terrain

Ce laboratoire technique s'inscrit directement dans l'infrastructure de la ferme maraîchère de Flora et Hazel pour garantir la réactivité et la stabilité de leurs services bio en ligne.
Cas d'Usage Concret

Appliquer les configurations optimisées pour soutenir les pics de consultation des abonnés de la ferme.

1 · OPcache : PHP qui ne recompile plus

OPcache est livré avec PHP moderne. Vérifier qu'il est actif :

$ php -v $ php -i | grep -i opcache.enable

Le réglage vit dans le fichier de configuration de PHP (adapter le numéro de version) :

$ sudo nano /etc/php/8.2/apache2/php.ini
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2

Recharger Apache :

$ sudo systemctl restart apache2.service
revalidate_freq=2 : PHP revérifie les fichiers modifiés toutes les 2 secondes. En production pure on peut monter cette valeur; en laboratoire, la laisser basse évite les surprises.

2 · APCu : le cache d'objets local

Installer l'extension puis redémarrer Apache :

$ sudo apt update $ sudo apt install php-apcu $ sudo systemctl restart apache2.service

Vérifier :

$ php -m | grep apcu
APCu vit dans la mémoire du processus PHP de CETTE machine : parfait tant qu'il n'y a qu'un serveur web. Dès qu'on essaime (semaine 8 !), chaque machine a son propre APCu et ils ne se parlent pas - c'est là que Memcached prend le relais.

3 · Memcached : la mémoire partagée

Installer le service et l'extension PHP :

$ sudo apt install memcached php-memcached $ sudo systemctl enable memcached $ sudo systemctl start memcached

Vérifier que le service écoute (port 11211 par défaut) :

$ sudo netstat -tulpn | grep memcached $ echo stats | nc 127.0.0.1 11211 | head

La configuration vit dans /etc/memcached.conf :

# mémoire allouée au cache (Mo) -m 64 # adresse d'écoute : 127.0.0.1 = local seulement -l 127.0.0.1 # port -p 11211
Si Memcached vit sur sa propre machine pour servir plusieurs serveurs web, remplacer 127.0.0.1 par l'adresse IP privée du serveur et ouvrir le port UNIQUEMENT pour le réseau interne (jamais vers Internet : un Memcached public est une invitation aux ennuis).

Brancher WordPress dessus

WordPress parle à Memcached par une extension d'objet cache (par exemple le module « W3 Total Cache » ou un drop-in object-cache.php). Le réglage type dans wp-config.php :

define('WP_CACHE', true); $memcached_servers = array( 'default' => array('127.0.0.1:11211') );

Mesurer l'effet : recharger une page de profil ou un tableau de bord (pages non servies par Varnish) et comparer le temps de réponse avant/après.

4 · mod_cache : le cache HTTP d'Apache

Activer les modules et recharger :

$ sudo a2enmod cache cache_disk $ sudo systemctl restart apache2.service

Configuration type dans le VirtualHost :

<IfModule mod_cache.c> CacheQuickHandler on CacheLock on CacheRoot /var/cache/apache2/mod_cache_disk CacheEnable disk / CacheDefaultExpire 300 CacheMaxExpire 3600 </IfModule>

Observer les entrées créées :

$ sudo ls -R /var/cache/apache2/mod_cache_disk | head
Même famille que Varnish (cache HTTP), mais dans le même processus qu'Apache : pratique pour un petit site, moins costaud qu'une vraie machine cache dédiée. C'est le comparatif à faire en laboratoire : mod_cache seul, puis Varnish devant.

5 · Mesurer pour croire

Un cache sans mesure est une croyance. Trois outils rapides :

$ ab -n 200 -c 10 http://adresse-du-site/ $ curl -s -o /dev/null -w "%{time_total}s\n" http://adresse-du-site/ $ sudo varnishstat -1 | grep -i cache

Comparer quatre configurations sur la même page : sans cache, OPcache seul, OPcache + Memcached, puis Varnish devant tout. Noter les temps : c'est la matière du rapport de laboratoire.

Guide technique du cours · Semaine 6 · Complément du laboratoire Installer un serveur Varnish pour un serveur Apache et du diaporama 🖼️ Cache web, proxy et proxy inverse.