Maison >Opération et maintenance >Nginx >Comment utiliser Nginx pour le contrôle du cache des requêtes HTTP

Comment utiliser Nginx pour le contrôle du cache des requêtes HTTP

王林
王林original
2023-08-02 14:01:121918parcourir

Comment utiliser Nginx pour le contrôle du cache des requêtes HTTP

Le contrôle du cache des requêtes HTTP est un moyen important pour optimiser les performances du site Web. Il peut réduire le nombre de requêtes traitées par le serveur et améliorer la vitesse de réponse du site Web. En tant que serveur Web hautes performances et serveur proxy inverse, Nginx fournit des fonctions de contrôle de cache flexibles. Cet article explique comment utiliser Nginx pour le contrôle du cache des requêtes HTTP.

1. Utiliser le cache proxy

Nginx fournit la fonction de cache proxy, qui peut mettre en cache les résultats de réponse du serveur en amont et réduire le nombre de requêtes adressées au serveur en amont. Pour utiliser la mise en cache proxy, vous pouvez ajouter la configuration suivante au fichier de configuration Nginx :

http {
  proxy_cache_path /var/cache/nginx 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$uri$is_args$args;
      proxy_cache_valid 200 302 10m;
      proxy_cache_valid 404 1m;
      proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
      proxy_ignore_headers Cache-Control;
      proxy_ignore_headers Set-Cookie;
      proxy_hide_header Set-Cookie;
      proxy_pass http://upstream_server;
    }
    ...
  }
}

Dans la configuration ci-dessus, proxy_cache_path est utilisé pour définir le chemin du cache et les paramètres associés. levels=1:2 signifie créer un répertoire de niveau 1 et un répertoire de niveau 2 dans le chemin du cache pour améliorer l'efficacité. keys_zone est utilisé pour définir le nom et la taille de la mémoire de la zone de cache, qui peuvent être ajustés en fonction des besoins réels. max_size indique la capacité maximale de la zone de cache et inactive indique le délai d'expiration du cache, c'est-à-dire que les caches qui n'ont pas été consultés dans les 60 minutes seront supprimés. use_temp_path=off signifie désactiver le chemin temporaire, ce qui peut améliorer les performances. proxy_cache_path用于设置缓存的路径和相关参数。levels=1:2表示在缓存路径中创建1级目录和2级目录,以提高效率。keys_zone用于设置缓存区的名称和内存大小,可以根据实际需要进行调整。max_size表示缓存区的最大容量,inactive表示缓存的过期时间,即60分钟内没有被访问的缓存将被删除。use_temp_path=off表示禁用临时路径,可以提高性能。

在具体的服务器配置中,通过location指令指定需要进行缓存的URL。proxy_cache指令表示启用缓存,proxy_cache_key指令指定缓存的键值,可以使用多个变量拼接成缓存键值。proxy_cache_valid指定了不同HTTP状态码的缓存有效期,如200和302状态码的响应结果在10分钟内有效,404状态码的响应结果在1分钟内有效。proxy_cache_use_stale用于指定当上游服务器出现错误、超时或更新时,是否使用过期的缓存。proxy_ignore_headersproxy_hide_header指令可用于忽略或隐藏响应头中的某些属性。

在配置完成后,重启Nginx服务使配置生效。此时,Nginx将会对匹配的URL进行缓存,相同的URL再次被请求时,将会直接从缓存中获取响应结果,而不需要再次请求上游服务器。

二、使用浏览器缓存

除了代理缓存,还可以使用浏览器缓存来减少网络请求。Nginx可以通过设置响应头中的Cache-ControlExpires来控制浏览器缓存的行为。

示例如下:

http {
  ...
  server {
    ...
    location /static/ {
      expires max;
      add_header Cache-Control public;
    }
    ...
  }
}

上述配置中,expires指令设置了max,表示将响应结果的过期时间设置为最大值,即永不过期。add_header指令为响应结果添加了Cache-Control头,并设置为public,表示允许公共缓存。

在具体的URL匹配规则中,可以根据不同的需求设置不同的缓存策略。比如,静态资源通常不会经常发生改变,可以设置expires为较长的时间,让浏览器缓存资源;而动态生成的页面可以设置为不缓存或缓存时间较短。

三、使用条件缓存

条件缓存是一种在客户端和服务器之间进行通信的机制,可以根据请求的条件决定是否使用缓存。Nginx通过设置响应头中的Last-ModifiedETag,以及请求头中的If-Modified-SinceIf-None-Match来实现条件缓存。

示例如下:

http {
  ...
  server {
    ...
    location / {
      if_modified_since before;
      add_header ETag "123456";
      if_none_match $http_if_none_match;
      if_modified_since off;
      ...
    }
    ...
  }
}

上述配置中,if_modified_since指令用于判断请求头中的If-Modified-Since是否早于服务器设置的Last-Modifiedadd_header指令添加了ETag头,用于标识资源的唯一性;if_none_match指令用于判断请求头中的If-None-Match是否与服务器设置的ETag相匹配;if_modified_sinceif_none_match指令分别对应了If-Modified-SinceIf-None-Match请求头的值。

通过配置条件缓存,可以在客户端发送请求时,根据服务器返回的Last-ModifiedETag判断是否使用缓存。如果资源没有发生变化,服务器可以返回304 Not Modified,客户端从缓存中获取资源;如果资源已经发生变化,服务器返回新的资源。

四、缓存策略

为了更好地控制缓存的行为,可以根据不同的URL设置不同的缓存策略。通常,静态资源的URL具有稳定的特点,可以设置较长时间的缓存失效期;而动态页面的URL可能会频繁变动,可以设置较短的缓存失效期。

示例如下:

http {
  ...
  server {
    ...
    location /static/ {
      expires 7d;
      add_header Cache-Control public;
    }

    location /dynamic/ {
      expires 1h;
      add_header Cache-Control no-cache;
    }
    ...
  }
}

上述配置中,以/static/开头的URL匹配静态资源,设置了过期时间为7天,允许公共缓存;以/dynamic/

Dans la configuration spécifique du serveur, spécifiez l'URL qui doit être mise en cache via la directive location. La directive proxy_cache indique l'activation de la mise en cache et la directive proxy_cache_key spécifie la valeur de la clé de cache. Plusieurs variables peuvent être utilisées pour diviser la valeur de la clé de cache. proxy_cache_valid spécifie la période de validité du cache des différents codes d'état HTTP. Par exemple, les résultats de réponse des codes d'état 200 et 302 sont valides dans un délai de 10 minutes, et les résultats de la réponse du code d'état 404 sont valides dans un délai d'une minute. . proxy_cache_use_stale est utilisé pour spécifier s'il faut utiliser un cache expiré lorsqu'une erreur, un délai d'attente ou une mise à jour se produit sur le serveur en amont. Les directives proxy_ignore_headers et proxy_hide_header peuvent être utilisées pour ignorer ou masquer certains attributs dans les en-têtes de réponse.

Une fois la configuration terminée, redémarrez le service Nginx pour que la configuration prenne effet. À ce stade, Nginx mettra en cache l'URL correspondante Lorsque la même URL est à nouveau demandée, le résultat de la réponse sera obtenu directement du cache sans demander à nouveau au serveur en amont.

2. Utiliser la mise en cache du navigateur🎜🎜En plus de la mise en cache du proxy, vous pouvez également utiliser la mise en cache du navigateur pour réduire les requêtes réseau. Nginx peut contrôler le comportement du cache du navigateur en définissant Cache-Control et Expires dans l'en-tête de réponse. 🎜🎜Un exemple est le suivant : 🎜rrreee🎜Dans la configuration ci-dessus, la directive expires définit max, ce qui signifie que le délai d'expiration du résultat de la réponse est défini sur le valeur maximale, c'est-à-dire qu'il n'expirera jamais. La directive add_header ajoute l'en-tête Cache-Control au résultat de la réponse et le définit sur public, indiquant que la mise en cache publique est autorisée. 🎜🎜Dans les règles de correspondance d'URL spécifiques, différentes stratégies de mise en cache peuvent être définies en fonction de différents besoins. Par exemple, les ressources statiques ne changent généralement pas fréquemment, vous pouvez donc définir expires sur une durée plus longue pour permettre au navigateur de mettre en cache les ressources tandis que les pages générées dynamiquement peuvent être configurées pour ne pas mettre en cache ou pour avoir un cache ; temps de cache plus court. 🎜🎜3. Utiliser la mise en cache conditionnelle 🎜🎜La mise en cache conditionnelle est un mécanisme de communication entre le client et le serveur, qui peut décider d'utiliser ou non la mise en cache en fonction des conditions de la requête. Nginx définit Last-Modified et ETag dans l'en-tête de réponse, ainsi que If-Modified-Since et If-None-Match code> pour implémenter la mise en cache conditionnelle. 🎜🎜Un exemple est le suivant : 🎜rrreee🎜Dans la configuration ci-dessus, la directive <code>if_modified_since est utilisée pour déterminer si le If-Modified-Since dans l'en-tête de la requête est antérieur. que le Dernier défini par le serveur -Modifié ; La directive add_header ajoute l'en-tête ETag pour identifier l'unicité de la ressource ; La directive if_none_match est utilisée pour déterminer l'en-tête de la requête si le If-None-Match correspond au ETag défini par le serveur ; Les instructions > et if_none_match correspondent respectivement. Les valeurs des en-têtes de requête If-Modified-Since et If-None-Match sont modifiées. 🎜🎜En configurant la mise en cache conditionnelle, lorsque le client envoie une requête, il peut être jugé s'il convient d'utiliser le cache en fonction du Last-Modified et du ETag renvoyés par le serveur. Si la ressource n'a pas changé, le serveur peut renvoyer 304 Not Modified et le client obtient la ressource du cache ; si la ressource a changé, le serveur renvoie la nouvelle ressource. 🎜🎜4. Stratégie de cache 🎜🎜Afin de mieux contrôler le comportement de mise en cache, vous pouvez définir différentes stratégies de mise en cache en fonction des différentes URL. Généralement, l'URL des ressources statiques est stable et une période d'expiration du cache plus longue peut être définie ; tandis que l'URL des pages dynamiques peut changer fréquemment et une période d'expiration du cache plus courte peut être définie. 🎜🎜Un exemple est le suivant : 🎜rrreee🎜Dans la configuration ci-dessus, les URL commençant par /static/ correspondent aux ressources statiques, définissent le délai d'expiration à 7 jours et autorisent la mise en cache publique des URL commençant par /dynamic/ correspondent aux ressources dynamiques, définissez le délai d'expiration sur 1 heure et désactivez la mise en cache. 🎜🎜Avec des stratégies de mise en cache raisonnables, vous pouvez améliorer les performances du site Web tout en garantissant que les utilisateurs disposent des dernières ressources. 🎜🎜Résumé🎜

Utiliser Nginx pour le contrôle du cache des requêtes HTTP est un moyen efficace d'optimiser les performances d'un site Web. Grâce à la mise en cache proxy, à la mise en cache du navigateur et à la mise en cache conditionnelle, le nombre de requêtes adressées au serveur peut être réduit et la vitesse de réponse du site Web peut être améliorée. Dans la stratégie de mise en cache spécifique, différentes périodes d'expiration du cache doivent être définies en fonction de différentes URL pour offrir une meilleure expérience utilisateur.

Référence : https://nginx.org/

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn