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.confhttp { # 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/defaultlocation / { 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