Comment mettre en cache du contenu dans Nginx

Comment mettre en cache du contenu dans Nginx

Nginx Être un serveur Web open-source consolidé et haute performance qui accélère le contenu et la livraison des applications, améliore la sécurité et améliore l'évolutivité. L'un des cas d'utilisation les plus courants de Nginx est un Cache de contenu, Ce qui est le moyen le plus efficace de renforcer les performances d'un site Web.

Lire aussi: 10 meilleurs outils de mise en cache open source pour Linux

Vous pouvez utiliser Nginx Pour accélérer les serveurs d'origine locaux en le configurant pour mettre en cache les réponses à partir de serveurs en amont et également pour créer des serveurs Edge pour les réseaux de livraison de contenu (Pli). Nginx alimente certains des plus grands CDN.

Lorsqu'il est configuré comme un cache, Nginx sera:

  • Cache contenu statique et dynamique.
  • Améliorer les performances de contenu dynamique avec des micro-caches.
  • Servir le contenu périmé tout en se réalisant en arrière-plan pour de meilleures performances.
  • remplacer ou définir des en-têtes de contrôle de cache, et plus.

Dans cet article, vous apprendrez à configurer Nginx comme un Cache de contenu en Linux pour faire fonctionner vos serveurs Web aussi efficacement que possible.

Conditions préalables:

Tu aurais dû Nginx Installé sur votre serveur Linux, sinon suivant ces guides pour installer nginx:

  • Comment installer nginx sur centos 8
  • Comment installer nginx sur Centos 7

Cache contenu statique sur Nginx

Le contenu statique est le contenu d'un site Web qui reste le même (ne change pas) sur les pages. Des exemples de contenu statique incluent des fichiers tels que des images, des vidéos, des documents; Fichiers CSS et fichiers JavaScript.

Si votre site Web utilise beaucoup de contenu statique, vous pouvez optimiser ses performances en permettant une mise en cache côté client où le navigateur stocke des copies du contenu statique pour un accès plus rapide.

La configuration de l'échantillon suivant est un bon coup, il suffit de remplacer www.exemple.com avec l'URL du nom de votre site Web et apportez des modifications à d'autres pathnames, le cas échéant.

serveur # remplacer l'URL de votre serveur Web pour www.exemple.com server_name www.exemple.com; root / var / www /exemple.com/ htdocs; Index index.PHP; access_log / var / log / nginx /exemple.com.accès.enregistrer; error_log / var / log / nginx /exemple.com.erreur.enregistrer; Emplacement / try_files $ uri $ uri / / index.php?$ args;  Emplacement ~ .php $ try_files $ uri = 404; Inclure FastCGI_PARAMS; # Remplacez la prise ou l'adresse et le port de votre serveur WordPress Fastcgi_Pass Unix: / var / run / php5-fpm.chaussette; #fastcgi_pass 127.0.0.1: 9000;  Emplacement ~ * .(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLS | exe | ppt | Tar | mid | midi | wav | bmp | rtf) $ expire max; log_not_found off; Access_log off;  

Cache dynamique du contenu sur nginx

Nginx utilise un cache à disque persistant situé quelque part dans le système de fichiers local. Alors commencez par créer le répertoire de disque local pour stocker du contenu mis en cache.
# mkdir -p / var / cache / nginx

Ensuite, définissez la propriété appropriée sur le répertoire de cache. Il devrait appartenir à la Nginx utilisateur (nginx) et le groupe (nginx) comme suit.

# chown nginx: nginx / var / cache / nginx 

Continuez maintenant plus loin pour voir comment activer le contenu dynamique sur Nginx dans la section ci-dessous.

Activation du cache FastCGI dans Nginx

Fastcgi (ou FCGI) est un protocole largement utilisé pour interfacer des applications interactives telles que Php avec des serveurs Web tels que Nginx. C'est une extension du CGI (Interface de passerelle commune).

Le principal avantage de FCGI est qu'il gère plusieurs demandes CGI en un seul processus. Sans cela, le serveur Web doit ouvrir un nouveau processus (qui doit être contrôlé, traiter une demande et être fermé) pour chaque demande de client pour un service.

Procéder Php scripts dans un déploiement de pile LEMP, Nginx les usages FPM (FastCGI Process Manager) ou Php-fpm, Une alternative populaire PHP FastCGI Implémentation. Une fois la Php-fpm Le processus est en cours d'exécution, Nginx est configuré aux demandes de proxy pour le traitement. Ainsi, Nginx peut également être configuré pour mettre en cache les réponses du Php-fpm serveur d'applications backend.

Sous Nginx, le Fastcgi Le cache de contenu est déclaré en utilisant une directive appelée fastcgi_cache_path au niveau supérieur http contexte, dans la structure de configuration de Nginx. Vous pouvez également ajouter le fastcgi_cache_key qui définit une clé (demande d'identifiant) pour la mise en cache.

De plus, pour lire l'état du cache en amont, ajoutez le add_header x-cache-status directive dans le http Contexte - Ceci est utile à des fins de débogage.

En supposant que le fichier de configuration du bloc de serveur de votre site est situé à / etc / nginx / confre.d / testapp.confli ou / etc / nginx / sites-disponible / testapp.confli (sous Ubuntu et ses dérivés), ouvrez le fichier de montage et ajoutez les lignes suivantes en haut du fichier.

fastcgi_cache_path / var / cache / nginx niveaux = 1: 2 keys_zone = cacheZone: 10m; inactive = 60m max_size = 40m; fastcgi_cache_key "$ schéma $ request_method $ host $ request_uri"; add_header x-cache $ upstream_cache_status; 
Activer le cache FastCGI dans nginx

Le fastcgi_cache_path La directive spécifie le nombre de paramètres qui sont:

  • / var / cache / nginx - Le chemin vers le répertoire du disque local pour le cache.
  • les niveaux - Définit les niveaux de hiérarchie d'un cache, il met en place une hiérarchie de répertoire à deux niveaux sous / var / cache / nginx.
  • keys_zone (nom: taille) - Permet la création d'une zone de mémoire partagée où toutes les clés actives et les informations sur les données (META) sont stockées. Notez que le stockage des touches dans la mémoire accélère le processus de vérification, en facilitant la détermination de Nginx pour déterminer si c'est un MANQUER ou FRAPPER, sans vérifier l'état sur le disque.
  • inactif - Spécifie le temps après quoi les données mises en cache qui ne sont pas accessibles pendant le temps spécifié sont supprimées du cache, quelle que soit leur fraîcheur. Une valeur de 60m Dans notre exemple, la configuration signifie que les fichiers non accessibles après 60 seront supprimés du cache.
  • taille max - Spécifie la taille maximale du cache. Il y a plus de paramètres que vous pouvez utiliser ici (lisez la documentation Nginx pour plus d'informations).

Les variables dans le fastcgi_cache_key La directive est décrite ci-dessous.

Nginx les utilise pour calculer la clé (identifiant) d'une demande. Surtout, pour envoyer une réponse en cache au client, la demande doit avoir la même clé qu'une réponse mise en cache.

  • $ schéma - Schéma de demande, HTTP ou HTTPS.
  • $ request_method - Méthode de demande, généralement "OBTENIR" ou "POSTE".
  • $ hôte - Cela peut être le nom d'hôte à partir de la ligne de demande, ou nom d'hôte du «Héberger»Champ d'en-tête de demande, ou le nom du serveur correspondant à une demande, dans l'ordre de priorité.
  • $ request_uri - signifie la demande complète de la demande URI (avec des arguments).

Également $ upstream_cache_status variable dans le add_header x-cache-status La directive est calculée pour chaque demande à laquelle Nginx répond, qu'il s'agisse d'un MANQUER (réponse introuvable dans le cache, obtenu à partir du serveur d'applications) ou un FRAPPER (réponse servie par cache) ou l'une des autres valeurs prises en charge.

Ensuite, dans le emplacement directive qui passe les demandes de PHP à Php-fpm, utilise le fastcgi_cache directives pour activer le cache que vous venez de définir ci-dessus.

Définissez également du temps de mise en cache pour différentes réponses en utilisant le fastcgi_cache_valid directive comme indiqué.

fastcgi_cache cacheZone; fastcgi_cache_valid 60m; 
Définir la zone de mise en cache et l'heure

Si seul le temps de mise en cache est spécifié comme dans notre cas, seulement 200, 301, et 302 Les réponses sont mises en cache. Mais vous pouvez également spécifier les réponses explicitement ou utiliser n'importe quel (pour n'importe quel code de réponse):

fastcgi_cache cacheZone; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; Ou fastcgi_cache cacheZone; fastcgi_cache_valid tout 10m; 

Performances de mise en cache FastCGI à réglage fin sur Nginx

Pour définir le nombre minimum de fois qu'une demande avec la même clé doit être faite avant la mise en cache de la réponse, incluez le fastcgi_cache_min_uses directive, soit dans le http ou serveur ou emplacement contexte.

fastcgi_cache_min_uses 3 
Définir l'utilisation minimale du cache

Pour permettre la revalidation des éléments de cache expirés à l'aide de demandes conditionnelles avec le «Si-modifié sur" et "If-None-Match»Champs d'en-tête, ajoutez le fastcgi_cache_revalidate directive, dans le http ou serveur ou emplacement contexte.

fastcgi_cache_revalidate sur; 
Définir la revalidation du cache

Vous pouvez également instruire Nginx Pour livrer du contenu mis en cache lorsque le serveur d'origine ou le serveur FCGI est en panne, en utilisant le proxy_cache_use_stale directive, dans la directive de localisation.

Cet exemple de configuration signifie que lorsque Nginx Reçoit une erreur, un délai d'attente et l'une des erreurs spécifiées du serveur en amont et a une version périmée du fichier demandé dans le contenu mis en cache, il livre le fichier périmé.

proxy_cache_use_stale error timeout http_500; 
Activer le service de données périmées

Une autre directive utile pour affiner les performances de mise en cache FCGI est fastcgi_cache_background_update qui fonctionne en conjonction avec le proxy_cache_use_stale directif. Lorsqu'il est réglé sur, il demande à Nginx de servir le contenu périmé lorsque les clients demandent un fichier expiré ou qui est en train d'être mis à jour à partir du serveur en amont.

fastcgi_cache_background_update sur; 
Activer la mise à jour de l'arrière-plan du cache

Le fastcgi_cache_lock est utile également, pour les performances du cache, le réglage fin de la demande de plusieurs clients pour le même contenu qui n'est pas dans le cache, Nginx ne transmettra que la première demande au serveur en amont, cachez la réponse puis servez les autres demandes du client à partir du cache.

fastcgi_cache_lock sur; 
Activer le verrouillage du cache

Après avoir apporté tous les changements ci-dessus dans le Nginx Fichier de configuration, enregistrer et fermer. Vérifiez ensuite la structure de configuration pour toutes les erreurs de syntaxe avant de redémarrer le service Nginx.

# nginx -t # systemctl redémarrer nginx 
Vérifiez et démarrez le service Nginx

Ensuite, testez si le cache fonctionne correctement, essayez d'accéder à votre application Web ou à votre site à partir de la commande Curl suivante (la première fois devrait indiquer un MANQUER, mais les demandes ultérieures devraient indiquer un FRAPPER comme indiqué dans la capture d'écran).

# curl -i http: // testapp.Tecmint.com 
Tester le cache FastCGI

Voici une autre capture d'écran montrant Nginx servant des données périmées.

Tester Nginx servant des données périmées

Ajouter des exceptions au cache de contournement

Il est possible de définir des conditions dans lesquelles Nginx ne doit pas envoyer de réponses mises en cache aux clients, en utilisant le fastcgi_cache_bypass directif. Et pour demander à Nginx de ne pas mettre du cache des réponses du serveur en amont du tout, utilisez le fastcgi_no_cache.

Par exemple, si vous voulez POSTE Demandes et URL avec une chaîne de requête pour toujours aller à PHP. Tout d'abord, déclarez une instruction IF pour définir la condition comme suit.

set $ skip_cache 0; if ($ request_method = post) set $ skip_cache 1;  

Puis activez l'exception ci-dessus dans le emplacement directive qui passe les demandes de PHP à Php-fpm, en utilisant le fastcgi_cache_bypass et fastcgi_no_cache directives.

 FastCGI_CACHE_BYPASS $ SKIP_CACHE; fastcgi_no_cache $ skip_cache; 

Il existe de nombreuses autres parties de votre site pour lesquelles vous ne voudrez peut-être pas permettre la mise en cache de contenu. Ce qui suit est un exemple de configuration Nginx pour améliorer les performances d'un site WordPress, fourni sur le nginx.com Blog.

Pour l'utiliser, apportez des modifications (comme le domaine, les chemins, les noms de fichiers, etc.) pour refléter ce qui existe dans votre environnement.

fastcgi_cache_path / var / run / nginx-cache niveaux = 1: 2 keys_zone = wordpress: 100m inactive = 60m; fastcgi_cache_key "$ schéma $ request_method $ host $ request_uri"; Exemple de serveur server_name.com www.exemple.com; root / var / www / exemple.com; Index index.PHP; Access_log / var / log / nginx / exemple.com.accès.enregistrer; error_log / var / log / nginx / exemple.com.erreur.enregistrer; set $ skip_cache 0; # Les demandes de publication et les URL avec une chaîne de requête doivent toujours passer à php if ($ request_method = post) set $ skip_cache 1;  if ($ query_string != "") set $ skip_cache 1;  # Ne cache pas les uris contenant les segments suivants if ($ request_uri ~ * "/ wp-admin / | / xmlrpc.php | wp-.*.php | / feed / | index.php | sitemap (_index)?.xml ") set $ skip_cache 1; # n'utilisez pas le cache pour les utilisateurs connectés ou les commentateurs récents if ($ http_cookie ~ *" comment_author | wordpress_ [a-f0-9] + | wp-postpass | wordpress_no_no_cache | wordpress_logged_in ") set $ skip_cache 1; emplacement / try_files $ uri $ uri / / index.php?$ args;  Emplacement ~ .php $ try_files $ uri / index.PHP; Inclure FastCGI_PARAMS; fastcgi_pass Unix: / var / run / php5-fpm.chaussette; FastCGI_CACHE_BYPASS $ SKIP_CACHE; fastcgi_no_cache $ skip_cache; fastcgi_cache wordPress; fastcgi_cache_valid 60m;  emplacement ~ / purge (/.*) fastcgi_cache_purge wordPress "$ schéma $ request_method $ host 1";  Emplacement ~ * ^.+.(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLS | exe | ppt | Tar | mid | midi | wav | bmp | rtf) $ Access_log off; log_not_found off; expire max;  Location = / Robots.txt Access_log off; log_not_found off;  Emplacement ~ /.  Nier tous; Access_log off; log_not_found off;  

Activer le cache proxy dans nginx

Nginx soutient également la mise en cache des réponses provenant d'autres serveurs proxés (défini par le proxy_pass directif). Pour ce cas de test, nous utilisons Nginx comme proxy inverse pour un nœud.Application Web JS, nous allons donc activer Nginx comme un cache pour le nœud.Application JS. Toutes les directives de configuration utilisées ici ont des significations similaires à celles des directives FastCGI dans la section précédente, nous ne les expliquerons donc pas à nouveau.

Pour activer la mise en cache des réponses d'un serveur proxied, incluez le proxy_cache_path directive au niveau supérieur http contexte. Pour spécifier comment les demandes sont mises en cache, vous pouvez également ajouter le proxy_cache_key directive comme suit.

proxy_cache_path / var / cache / nginx app1 keys_zone = proxycache: 100m inactive = 60m max_size = 500m; proxy_cache_key "$ schéma $ request_method $ host $ request_uri"; add_header x-cache-status $ upstream_cache_status; proxy_cache_min_uses 3; 

Ensuite, activez le cache dans la directive de localisation.

emplacement / proxy_pass http: // 127.0.0.1: 3000; proxy_cache proxycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;  

Pour définir des conditions dans lesquelles Nginx n'envoie pas de contenu mis en cache et ne cache pas du tout de réponse à partir du serveur en amont, incluez le proxy_cache_bypass et proxy_no_cache.

 proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_no_cache $ http_pragma $ http_authorization; 

Performance de cache proxy à réglage fin

Les directives suivantes sont utiles pour affiner les performances du cache proxy. Ils ont également les mêmes significations que les directives FastCGI.

proxy_cache_min_uses 3; proxy_cache_revalidate sur; proxy_cache_use_stale error timeout uping http_500; proxy_cache_background_update sur; proxy_cache_lock sur; 

Pour plus d'informations et des directives de configuration de mise en cache, consultez la documentation des deux modules principaux ngx_http_fastcgi_module et ngx_http_proxy_module.

Ressources supplémentaires: cache de contenu Nginx et conseils pour améliorer les performances WordPress.