Nginx Microcaching · 3 min read · Jan 22, 2026

Pourquoi vous devriez toujours utiliser Nginx avec le microcaching

Pourquoi vous devriez toujours utiliser Nginx avec le microcaching

Tout le monde sait à quel point il est difficile d’extraire le maximum de votre(s) serveur(s) web. Dans mon travail quotidien en tant qu’ingénieur d’hébergement, cela signifie que je reçois assez souvent la même question : “Wow, super site web, mais peut-il gérer un trafic important ?”.

La situation “normale”

Un site web “normal” fonctionnant sous Apache avec mod_php devrait être capable de traiter 20 requêtes par seconde sans problème, mais que se passe-t-il si vous obtenez 50 requêtes par seconde (ce qui n’est pas étrange pour certains sites comme ceux des partis politiques, etc.) ? La réponse, à mon avis, est de laisser tomber Apache, car tel qu’il est actuellement, Apache ne fait plus le poids.

OUI ! Nginx !

Voici Nginx ! Ce que vous faites, c’est que vous configurez votre site web sur Nginx et vous effectuez un test de charge rapide (par exemple, 1000 requêtes avec 200 utilisateurs concurrents) et vous constatez que vous n’obtenez pas beaucoup plus qu’avec Apache, mais comment ? C’est très simple, c’est dû au fait que Nginx n’a pas de module php intégré, donc vous auriez besoin d’un processeur fastcgi pour traiter les pages php (je suggère d’utiliser php-fpm car c’est mieux que spawn-cgi). Alors, que devrais-je utiliser maintenant, demandez-vous ? Utilisez le microcaching !

Qu’est-ce que le microcaching ?

Qu’est-ce que le microcaching ? Eh bien, la théorie est que vous mettez en cache vos fichiers, etc. pour une courte durée (comme par exemple 1 seconde). Ce que cela signifie, c’est que lorsqu’un utilisateur demande la page, elle est mise en cache, donc la prochaine requête pour une autre viendra du cache, et avec 100 utilisateurs demandant dans les 5 secondes, seulement 1 utilisateur sur 20 devra construire la page complète (et avec Nginx et un site bien structuré, cela ne pose aucun problème).

Je n’y crois pas !

Vous feriez mieux d’y croire ! Laissez-moi vous donner un exemple, prenez ce site web sur lequel vous êtes en ce moment. Disons que nous avons un test de charge de 1000 requêtes avec 200 utilisateurs concurrents. Si vous exécutez ce site web sous Apache, vous obtiendriez entre 10 et 40 requêtes par seconde, maximum ! Et votre serveur web serait sous une charge sérieuse et vous seriez contraint d’élargir votre environnement. Sous Nginx avec php-fpm sans microcaching, c’est la même chose (peut-être un peu plus de requêtes, mais votre serveur aurait beaucoup de processus php-fpm en cours d’exécution pour traiter les requêtes). Avec le microcaching, vous obtenez un impressionnant 300-450 requêtes par seconde !

D’accord, donnez-le moi !

Le microcaching est en fait facile à configurer, ci-dessous un exemple de configuration que vous pourriez exécuter pour n’importe quel site web fait avec PHP (dans ce cas, il est spécifique à Wordpress). Jetez un œil :

#
# votre site web
#
server {
    listen       80;
    server_name  ;
    access_log    main;
    error_log ;
    root   ;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # Configuration des variables par défaut
        set $no_cache "";
        # Si ce n'est pas GET/HEAD, ne pas mettre en cache et marquer l'utilisateur comme non-cacheable pendant 1 seconde via un cookie
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # Supprimer le cookie de non-cache si nécessaire
        # (pour une raison quelconque, add_header échoue s'il est inclus dans le bloc if précédent)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # Contourner le cache si le cookie de non-cache est défini
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # Contourner le cache si le drapeau est défini
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

Vous devriez également ajouter le format de cache et la zone de cache dans votre nginx.conf, ajoutez ces lignes à votre bloc http {} :

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

Essayez-le !

J’encourage tout le monde à l’essayer par eux-mêmes et à voir l’amélioration des performances ! Je sais que c’est un grand changement de passer d’Apache à Nginx (en termes de configuration), mais vous vous y habituerez très rapidement !

Découvrez http://livebyt.es pour d’autres articles à venir bientôt !

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.