Serveur Debian

Administration con centré . com !

Serveur Debian

NGNIX + Cache

 +------------------+
 |  Utilisateurs    |
 +---------+--------+
           |
           v                            
+---------------------------------------+
|  Nginx (proxy inverse)  + Cache       |
+---------+-----------------------------+
          |
          v                      
+---------------------------------+
|  Apache + (PHP / FastCGI)       |
+---------+-----------------------+

Le cache de Nginx permet de stocker temporairement des copies de réponses de backend (comme Apache) afin de réduire la charge sur les serveurs backend et d'améliorer les performances.

sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
sudo nano /etc/nginx/nginx.conf

http {
    # Autres configurations existantes...

    # Configuration des zones de cache
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    # Paramètres du cache
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_cache_use_stale error timeout updating invalid_header http_500 http_502 http_503 http_504;
    proxy_ignore_headers "Cache-Control" "Expires";
}

proxy_cache_path : Spécifie le chemin du répertoire de cache et configure les paramètres du cache.
levels=1:2 : Organisation du répertoire de cache en sous-répertoires.
keys_zone=my_cache:10m : Crée une zone de mémoire partagée nommée my_cache avec une taille de 10 mégaoctets pour stocker les clés de cache.
max_size=1g : Limite la taille maximale du cache à 1 gigaoctet.
inactive=60m : Supprime les objets du cache qui n'ont pas été accédés depuis 60 minutes.
use_temp_path=off : Utilise directement le chemin de cache spécifié sans utiliser de répertoire temporaire.
proxy_cache_key : Définit la clé unique utilisée pour stocker et rechercher les objets de cache.
proxy_cache_valid : Spécifie la durée pendant laquelle les réponses sont considérées comme valides dans le cache pour différents codes de réponse HTTP.
proxy_cache_use_stale : Permet à Nginx d'utiliser des réponses en cache obsolètes dans certaines situations, comme les erreurs de serveur.
proxy_ignore_headers : Ignore les en-têtes de réponse spécifiés lors de la détermination de la durée de vie du cache.
proxy_cache : Active le cache pour cette localisation.
proxy_cache_bypass : Permet de contourner le cache en fonction de certaines conditions, par exemple si le client envoie un en-tête Cache-Control.
add_header X-Proxy-Cache : Ajoute un en-tête HTTP à la réponse pour indiquer le statut du cache (HIT, MISS, BYPASS).
location ~ .(jpg|jpeg|png|gif|ico|css|js)$* : Cache les fichiers statiques (images, CSS, JS) pendant 30 jours.
location ~ .(php|twig)$ : Ne met pas en cache les fichiers PHP et Twig pour s'assurer que les contenus dynamiques sont toujours à jour.
location / : Configuration par défaut pour toutes les autres requêtes, avec cache activé.

sudo nano /etc/nginx/sites-available/default


    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Activer le cache
        proxy_cache my_cache;
        proxy_cache_bypass $http_cache_control;
        add_header X-Proxy-Cache $upstream_cache_status;
    }



pour les sites dynamique PHP + BASE DE DONNEE 



    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

# Cache des contenus statiques
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        proxy_cache my_cache;
        proxy_cache_valid 200 304 1h;
        proxy_cache_bypass $http_cache_control;
        add_header X-Proxy-Cache $upstream_cache_status;
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ \.(php|twig)$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_cache_control;
        add_header X-Proxy-Cache $upstream_cache_status;
    }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache my_cache;
        proxy_cache_bypass $http_cache_control;
        add_header X-Proxy-Cache $upstream_cache_status;
    }
    }


sudo nginx -t
sudo systemctl restart nginx



Vide le cache !!

sudo systemctl stop nginx && sudo rm -rf /var/cache/nginx/* && sudo systemctl start nginx

ou

Utilisation de proxy_cache_purge pour une gestion plus fine

location /purge {
    allow 127.0.0.1;
    deny all;
    proxy_cache_purge my_cache "$scheme$request_method$host$request_uri";
}

#Pour purger un élément spécifique du cache, utilisez la commande curl :

curl -X PURGE http://127.0.0.1/cached/path