Menu Fermer

Nginx : configurer un MicroCaching pour améliorer les performances

Google à travers les Core Web Vital a lancé course à la vitesse.
La configuration du serveur WEB pour un temps de réponse le plus bas possible est donc primordiale pour un bon référencement.
Mais lorsque l’on héberge du contenu dynamique, tel qu’un forum phpBB, PunBB ou un site WooCommerce, il est n’est pas forcément simple de proposer de bon temps de réponse par une mise en cache.
Pour vous aider, il est possible de mettre en place une stratégie de MicroCaching sur Nginx et PHP-FPM.

Dans ce tutoriel, je vous explique ce qu’est le micro caching et comment le mettre en place sur Nginx.

Nginx : configurer un MicroCaching pour améliorer les performances

Qu’est-ce que le MicroCaching ?

Le micro caching ou cache micro consiste à mettre en place un cache avec un TTL très bas.
C’est à dire un délai de cache très bas par exemple 1 ou 2 minutes.
Ainsi, lorsqu’un utilisateur se connecte sur une page WEB, celle-ci est mise en cache.
Si d’autres utilisateurs envoient des requêtes sur cette même page, le cache va alors répondre.
Celle évite à PHP-FPM de reconstruire la page et donc le temps de réponse devient très bon.
Puis le cache expire et la page est remise en cache avec une version plus récente.
Ainsi de suite.

De ce fait, cette technique pour cacher une page est très intéressant sur les contenus dynamiques car elle permet de bénéficier d’une mise en cache tout en proposant une version de page relativement récent.

Cela permet un gain du TTFB car le serveur répond plus vite lorsqu’il n’a pas besoin de consulter le serveur upstream.
Ainsi, on obtient de meilleurs scores LCP et FCP.

Dans le cas d’un site WordPress, Joomla classique, cela n’a peut d’intérêt puisque les pages WEB ne changent pas souvent.
Il faut plutôt dans ce cas configurer un cache classique avec un délai important de plusieurs heures.

Comment configurer un MicroCaching sur Nginx pour améliorer les performances

Mettre en place le MicroCaching sur Nginx avec FastCGI

Tout d’abord, on créé le path fastcgi dans la partie http.
Il est important de créer une zone keys_zone=micro:10m

fastcgi_cache_path /data/cache/nginx/micro levels=1:2 keys_zone=micro:10m inactive=600s max_size=2G use_temp_path=off;

Voici un exemple de location PHP :

location ~ /\.php(/|$) {
            fastcgi_ignore_headers Cache-Control Expires;
            add_header X-Micro-caching-Status $upstream_cache_status;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;

            fastcgi_cache micro;
            fastcgi_cache_key "$cookie_phpbb3_malekal_u$scheme$request_method$host$request_uri";
            fastcgi_pass $php_socket;
            fastcgi_index index.php;

            fastcgi_buffers 32 512k;
            fastcgi_buffer_size 512k;
            fastcgi_busy_buffers_size 512k;
            fastcgi_temp_file_write_size 1024k;


            fastcgi_buffering on;
            fastcgi_cache_use_stale updating;
            fastcgi_cache_background_update on;
            fastcgi_cache_lock on;

            fastcgi_cache_valid 200 302 5m;
            fastcgi_cache_valid 301 1d;
            fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

            fastcgi_keep_conn on;
            include /etc/nginx/fastcgi_params;
}

Je ne vais pas détailler tous les éléments des directives, pour plus de détails, suivez ce guide : Configurer le cache FastCGI de Nginx

Voici les réglages pour configurer un microcaching :

  • fastcgi_ignore_headers : régler l’en-tête pour faire apparaître les informations de cache (HIT, MISS, BYPASS)
  • fastcgi_cache micro : il s’agit du nom du nom de la keys_zone définit dans fastcgi_cache_path
  • add_header X-Micro-caching-Status $upstream_cache_status :
  • fastcgi_cache_valid 200 302 5m : On cache les pages retournant un HTTP 200 ou 302 pendant 5 minutes. Réglez le délai selon l’équilibre entre délivrer une version à jour du contenu et garder un délai de cache conséquent
  • fastcgi_cache_use_stale error : lorsque NGinx reçoit une erreur, un délai d’attente et des erreurs spécifiées du serveur upstream et dispose d’une version rassise du fichier demandé dans le contenu mis en cache, il fournit le fichier dépassé
  • fastcgi_cache_use_stale updating et fastcgi_cache_background_update on : demande à Nginx de servir de contenu obsolète lorsque les clients demandent un fichier expiré ou sont en cours de mise à jour à partir du serveur en amont
  • fastcgi_cache_lock on : si plusieurs clients demandent le même contenu qui ne figure pas dans le cache, Nginx n’enverra que la première demande au serveur en amont (upstream), le cache de la réponse servant ensuite les autres demandes clientes du cache.

Notez que pour vous pouvez utiliser la directive fastcgi_cache_min_uses qui définit le nombre de demandes après quoi la réponse sera mise en cache.
Par exemple pour ne cacher qu’après deux demandes :

fastcgi_cache_min_uses 2;

Tester les performances du MicroCaching de Nginx

Ensuite, on teste si tout fonctionne grâce aux informations du header.
Par exemple avec les outils de développement des navigateurs internet ou encore avec curl.

A la première connexion, la page n’est pas en cache, on le voit car header X-Micro-caching-Status retourne MISS.
Le temps de chargement de la page internet est de 1,70s et le DOM se charge en 768ms.

Tester les performances du MicroCaching de Nginx

Lorsque la page est en cache avec X-Micro-caching-Status retourne HIT.
Le DOM se charge en 505 ms et la page en 1,15s.

Tester les performances du MicroCaching de Nginx

Ainsi on gagne environ 200 ms entre une page en cache et une page non cachée.