GNU/Linux >> Tutoriels Linux >  >> Linux

Comment activer la mise en cache FastCGI côté serveur avec Nginx et PHP

Nginx est un serveur Web open source et hautes performances qui peut être utilisé pour accélérer la diffusion de contenu et d'applications. Nginx améliore la sécurité, améliore l'évolutivité et peut également être utilisé comme équilibreur de charge haute disponibilité. Il peut être utilisé comme proxy inverse et l'une des utilisations les plus importantes de Nginx est la mise en cache de contenu. L'une des meilleures approches consiste à utiliser Nginx comme cache de contenu. Dans cet article, nous aborderons la mise en cache du contenu Nginx FastCGI pour de meilleures performances des sites Web.

Activation de la mise en cache FastCGI dans Nginx

Dans cet article, nous supposons que vous avez déjà installé Nginx avec PHP sur votre machine Linux.

Pour commencer à activer la mise en cache FastCGI, modifiez le fichier de configuration de l'hôte virtuel dans lequel la mise en cache doit être activée.

$ cd /etc/nginx/conf.d
$ vi example.conf

Ajoutez le contenu suivant en haut du fichier. N'oubliez pas que les lignes doivent être en dehors de la directive server {} .

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Où,

  • fastcgi_cache_path – emplacement de la cache
  • niveaux – niveau hiérarchique du cache, il établit une hiérarchie de répertoires à deux niveaux sous /etc/nginx/cache
  • keys_zone – nom de la zone mémoire (Dans cet exemple, j'ai utilisé MYAPP. Vous pouvez avoir votre propre préférence)
  • inactif – spécifie le temps après lequel les données mises en cache qui ne sont pas consultées pendant le temps spécifié sont supprimées du cache. Dans cet exemple, le temps d'inactivité est défini sur 60 m, qui peut être augmenté ou diminué.
  • fastcgi_cache_key – Il spécifie comment les noms de fichiers du cache seront hachés

Variables utilisées dans factcgi_cache_key

  • Schéma $ – schéma de requête HTTPS ou HTTP
  • $request_method – spécifie les méthodes de requête telles que GET ou POST
  • $hôte – Nom du serveur correspondant à la requête
  • $request_uri – URI de requête complète

L'emplacement du fichier cache peut être n'importe où sur le disque dur, mais la taille doit être inférieure à la mémoire RAM + swap du système pour éviter le problème "Impossible d'allouer de la mémoire".

Allez maintenant à la directive location où la requête PHP est transmise à php-fpm. À l'intérieur de "location ~ \.php$ {}", ajoutez les lignes suivantes

fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;

Où MYAPP est le nom de la zone mémoire et fastcgi_cache_valid 200 met en cache toutes les réponses HTTP 200.

Si seule l'heure est définie, les réponses 200, 301 et 302 sont mises en cache.

Exécutez la commande suivante pour tester la configuration de l'hôte virtuel Nginx.

$ nginx -t

Redémarrez maintenant le service Nginx.

$ systemctl restart nginx

Un fichier de configuration vhost complet ressemble à

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
  listen 80;
  root /usr/share/nginx/html;
  index index.php index.html index.htm;
  server_name your_server_name;
  location / {
    try_files $uri $uri/ /index.html;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_cache MYAPP;
    fastcgi_cache_valid 200 60m;
  }
}

Test de la mise en cache FastCGI

Créez un simple fichier PHP dans le répertoire racine du document.

$ vi /usr/share/nginx/html/info.php

Collez le contenu suivant et enregistrez

<?php
phpinfo();
?>

Maintenant, demandez le fichier en utilisant la commande curl ou en utilisant un navigateur

Si la mise en cache fonctionne correctement, vous pouvez répertorier le répertoire de mise en cache sous /etc/nginx/cache

Ajoutez la ligne suivante au-dessus de la directive server{} pour indiquer si le cache a été manqué ou atteint

add_header X-Cache $upstream_cache_status;

Redémarrez le Nginx et exécutez la commande curl en tant que

$ curl -I http://localhost/info.php

Définition des exceptions de cache dans Nginx fastCGI Cache

Parfois, nous n'avons pas besoin de mettre en cache des contenus dynamiques tels que des pages d'authentification de base. Ces types de contenu peuvent être évités d'être mis en cache en fonction de différentes variables comme "$request_method" ""$request_uri" "$http_cookie" etc.

Vous trouverez ci-dessous l'exemple de configuration pour l'exception de cache et doit être utilisé à l'intérieur du serveur{}

directives.

#Cache everything by default

set $no_cache 0;

#Don't cache POST requests
if ($request_method = POST)
{
set $no_cache 1;
}


#Don't cache if the URL contains a query string
if ($query_string != "")
{
set $no_cache 1;
}


#Don't cache the following URLs
if ($request_uri ~* "/(cp/)")
{
set $no_cache 1;
}

#Don't cache if there is a cookie called PHPSESSID
if ($http_cookie = "PHPSESSID")
{
set $no_cache 1;
}

Conclusion

Dans cet article, nous avons appris à configurer Nginx avec PHP pour la mise en cache de contenu dynamique. Nous avons également découvert différentes astuces pour configurer des exceptions de cache.


Linux
  1. Comment installer et configurer Varnish Cache 6 avec Nginx sur CentOS 8

  2. Comment configurer Nginx pour travailler avec PHP via PHP-FPM

  3. Comment activer HTTP2 dans NGINX

  4. Comment installer et activer le cache PHP alternatif (APC) sur CentOS

  5. Comment enquêter sur une fuite mémoire avec Apache et PHP ?

Comment activer IPv6 dans Nginx ?

Comment activer TLS 1.3 sur Apache et Nginx

Comment configurer PHP-FPM avec NGINX

Comment déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose

Comment installer et configurer Memcached avec Apache et PHP

Comment activer la bibliothèque GD en PHP avec LibJPEG, FreeType et LibPNG