Maison  >  Article  >  Opération et maintenance  >  Comment configurer le cache de contenu Nginx et quelles sont les configurations de paramètres courantes ?

Comment configurer le cache de contenu Nginx et quelles sont les configurations de paramètres courantes ?

WBOY
WBOYavant
2023-05-11 22:25:111573parcourir

Scénario d'utilisation :

La page du projet doit charger beaucoup de données, qui ne changent pas fréquemment. Elle n'implique pas de personnalisation personnalisée. Elle génère dynamiquement des données pour chaque requête. Les performances ne sont pas aussi bonnes que la mise en cache des résultats. en fonction du routage et des paramètres des requêtes, l'utilisation du cache nginx améliorera considérablement la vitesse des requêtes.

Bases

Il vous suffit de configurer proxy_cache_path et proxy_cache pour activer la mise en cache du contenu. Le premier est utilisé pour définir le chemin du cache et la configuration, et le second est utilisé pour activer la mise en cache.

http {
 ...
 proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

 server {
 proxy_cache mycache;
 location / {
  proxy_pass http://localhost:8000;
 }
 }
}

Description du paramètre correspondant :

1. Le répertoire du disque local utilisé pour la mise en cache est /path/to/cache/

2.levels Une hiérarchie à deux niveaux est mise en place dans /path/to/cache/. Table des matières. Placer un grand nombre de fichiers dans un seul répertoire peut ralentir l'accès aux fichiers. C'est pourquoi, pour la plupart des déploiements, nous recommandons une hiérarchie de répertoires à deux niveaux. Si le paramètre niveaux n'est pas configuré, nginx placera tous les fichiers dans le même répertoire.

3.keys_zone Configurez une zone de mémoire partagée, utilisée pour stocker les clés de cache et les métadonnées, un peu similaire à l'utilisation de minuteries. Mettre une copie de la clé en mémoire permet à nginx de décider rapidement si une requête est un succès ou un échec sans récupérer le disque, ce qui améliore considérablement la vitesse de récupération. Un espace mémoire de 1 Mo peut stocker environ 8 000 clés, donc l'espace mémoire de 10 Mo configuré ci-dessus peut stocker près de 80 000 clés.

4.max_size définit la limite supérieure du cache (10g dans l'exemple ci-dessus). Ceci est facultatif ; ne pas spécifier de valeur permet au cache de croître et de consommer tout l'espace disque disponible. Lorsque le cache atteint cette limite, le processeur appelle le gestionnaire de cache pour supprimer les fichiers les moins récemment utilisés, réduisant ainsi l'espace du cache en dessous de cette limite.

5.inactive spécifie combien de temps un élément peut rester en mémoire sans être consulté. Dans l'exemple ci-dessus, si un fichier n'est pas demandé dans les 60 minutes, la gestion du cache le supprimera automatiquement de la mémoire, que le fichier ait expiré ou non. La valeur par défaut de ce paramètre est de 10 minutes (10 m). Notez que le contenu inactif est différent du contenu expiré. nginx ne supprimera pas automatiquement le contenu expiré spécifié par l'en-tête de contrôle de cache (cache-control:max-age=120 dans cet exemple). Le contenu expiré ne sera supprimé que s'il n'est pas consulté dans le délai spécifié par inactif. Si un contenu expiré est consulté, nginx l'actualisera à partir du serveur d'origine et mettra à jour le minuteur inactif correspondant.

6.nginx placera initialement les fichiers destinés à être écrits dans le cache dans une zone de stockage temporaire. La commande use_temp_path=off demande à nginx d'écrire ces fichiers dans le même répertoire lors de leur mise en cache. Nous vous recommandons fortement de désactiver le paramètre pour éviter les copies de données inutiles dans le système de fichiers. use_temp_path a été introduit dans la version nginx1.7 et nginx plus r6.

Enfin, la commande proxy_cache démarre la mise en cache du contenu dont l'URL correspond à la partie emplacement (dans ce cas, /). Vous pouvez également ajouter la commande proxy_cache à la section serveur, qui appliquera la mise en cache à tous les services dont les emplacements ne spécifient pas leur propre commande proxy_cache.

Processus liés au cache nginx

Il existe deux processus nginx supplémentaires impliqués dans le cache :

  • le gestionnaire de cache est démarré périodiquement pour vérifier l'état du cache. Si la taille du cache dépasse la limite définie par le paramètre max_size dans proxy_cache_path, le gestionnaire de cache supprime les données récemment consultées. Entre les démarrages du gestionnaire de cache, la quantité de données mises en cache peut brièvement dépasser la taille configurée.

  • le chargeur de cache ne s'exécute qu'une seule fois, après le démarrage de nginx. Il charge les métadonnées sur les données précédemment mises en cache dans une zone de mémoire partagée. Le chargement de l'intégralité du cache en une seule fois peut consommer suffisamment de ressources pour dégrader les performances de nginx dans les premières minutes suivant le démarrage. Pour éviter cela, configurez le chargement itératif du cache en incluant les paramètres suivants dans la directive proxy_cache_path :

    • loader_threshold - durée de l'itération en millisecondes (200 par défaut)

    • loader_files - une fois Nombre maximum d'éléments chargés lors des itérations (par défaut 100)

    • loader_sleeps - délai entre les itérations en millisecondes (par défaut 50)

Dans l'exemple suivant, la durée de l'itération est de 300 ms Ou jusqu'à ce que 200 éléments soient chargés dans :

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

Autres paramètres communs

Exemple de configuration :

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
 ...
 location / {
  proxy_cache my_cache;
  # proxy_cache_key "$host$request_uri$cookie_user";   proxy_cache_min_uses 3;
  proxy_cache_methods get head post;
  proxy_cache_valid 200 302 10m;
  proxy_cache_valid 404  1m;
  # proxy_cache_valid any 5m;   proxy_pass http://localhost:8000;
 }
}

Description du paramètre correspondant :

  • proxy_cache_key Pour modifier les caractéristiques de la requête utilisées lors du calcul de la clé, spécifiez la clé mise en cache, cela n'est pas recommandé. Un exemple est d'utiliser le nom de domaine, URL de demande et cookie utilisateur comme clé, ce qui signifie qu'une page sera mise en cache n fois pour différents utilisateurs. Dans la plupart des cas, une telle opération n'est pas requise.

  • proxy_cache_min_uses est le nombre minimum de requêtes qui doivent utiliser la même clé avant que la réponse ne soit mise en cache.

  • proxy_cache_methods 为指定要被缓存的请求方式的响应值,默认为 get 和 head,新增其他的需要一起列出来,如上示例所示。

  • proxy_cache_valid 为响应状态码的缓存时间,示例可以为每个状态码缓存指定时间,也可以使用 any 进行全部状态码的缓存。

清除缓存

需要提前加一个配置,用于标识使用 http purge 方法的请求并删除匹配的 url 对应的缓存。

1.在 http {} 上下文中创建新变量,例如 $purge_method, 他依赖于 $request_method 变量:

http {
 ...
 map $request_method $purge_method {
  purge 1;
  default 0;
 }
}

2.在 location {} 块中,已经配置缓存的前提下,引入 proxy_cache_purge 参数来指定清除缓存请求的条件。例如在上一步指定的 $request_method

server {
 listen  80;
 server_name www.example.com;

 location / {
  proxy_pass https://localhost:8002;
  proxy_cache mycache;

  proxy_cache_purge $purge_method;
 }
}

配置完并使之生效之后,就可以发送一条 purge 请求来让缓存失效了,例如:

curl -x purge -d – https://www.example.com/*

在该示例中,将清除具有公共 url 部分(由星号通配符指定)的资源。但这些缓存条目不会从缓存中完全删除:它们会保留在磁盘上,直到它们被视为不活动(由proxy_cache_path 中的 inactive参数决定)的时候才完全删除,或缓存清除器(由 proxy_cache_path 中的 purge 决定),或客户端尝试访问它们的时候。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer