3 votes

Comment Squid sait-il si son cache est validé ?

En mode proxy inverse, Squid peut mettre en cache le contenu de sites Web précédemment consultés par des appareils du réseau.

Que se passe-t-il si le contenu du site distant est modifié d'une manière ou d'une autre, peut-être par une poussée de code ? Comment Squid sait-il qu'il doit aller sur le site d'origine pour obtenir une nouvelle version de la ressource, au lieu d'aller dans son cache ?

Ce problème se pose-t-il davantage avec les sites dynamiques basés sur le javascript (page unique) ?

Une question secondaire : Est-ce que le "reverse proxy" est essentiellement la même chose que le "mode accélérateur" pour Squid ?

4voto

snowdude Points 2790

Oui, Squid mettra en cache les réponses du ou des serveurs dorsaux en utilisant la méthode conventionnelle d'interprétation des en-têtes que le serveur dorsal envoie avec chaque réponse.

Une réponse typique pour un contenu dynamique qui ne doit pas être mis en cache ressemble à quelque chose comme ça :

Expires: Fri Jul 25 10:19:36 CEST 2014 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache

Techniquement, chacun de ces en-têtes est déjà suffisant pour déclarer le contenu de la réponse dynamique, mais la sagesse conventionnelle semble toujours les utiliser tous. Programmation du culte du cargo ou rétrocompatibilité ?

Cache-Control est l'en-tête qui doit vous préoccuper le plus. Il s'agit des instructions de mise en cache pour votre reverse proxy Squid, ainsi que pour tout serveur proxy intermédiaire de mise en cache, jusqu'au navigateur lui-même. Les options sont les suivantes :

  • private o public ; une réponse privée est spécifique à un utilisateur et ne doit pas être mise en cache, une réponse publique peut être mise en cache.
  • no-cache fait essentiellement ce qu'il semble être, à savoir une instruction de revalider la ressource pour chaque demande ultérieure. Même si, après validation, il est prouvé que la ressource est toujours valide, une réponse en cache peut encore être servie.
  • no-store une instruction claire indiquant que la réponse doit être traitée comme confidentielle et ne doit pas être stockée du tout, un peu plus forte que l'option no-cache ci-dessus.
  • max-age en secondes remplace l'en-tête Expires et indique quand une ressource a expiré et doit être purgée du cache.
    • s-maxage en secondes comme ci-dessus, mais pour les caches partagés comme les réseaux de diffusion de contenu.

Expires est la manière classique de définir l'instruction du cache, avec un simple horodatage ne dépassant pas un an dans le futur.

Pragma est un en-tête de la vieille école, il faut lui donner la valeur suivante no-cache sera interprété par tout navigateur récent comme Cache-Control: no-cache et je pense qu'elle n'est plus présente dans les spécifications plus récentes du protocole HTTP, bien qu'elle soit encore honorée pour des raisons de rétrocompatibilité historique.

Les en-têtes définis pour un contenu plus statique doivent indiquer à Squid (ainsi qu'aux navigateurs web de vos visiteurs) que ces réponses peuvent être mises en cache.

Cache-Control: no-transform,public,max-age=300,s-maxage=900
Content-Type: text/html; charset=UTF-8
Date: Fri Jul 25 10:19:36 CEST 2014 GMT
Expires: Sat Jul 26 10:19:36 CEST 2014 GMT

Le problème est qu'à moins que vous ne vidiez manuellement le contenu du cache de Squid, les objets seront stockés pendant la durée de leurs en-têtes de contrôle de cache. Squid n'a pas de dispositions comme celles que l'on trouve dans Varnish ou dans le logiciel utilisé par les CDN pour honorer les demandes de PURGE afin d'invalider des objets spécifiques mis en cache.

La solution de contournement consiste à faire en sorte que votre solution de gestion de contenu garantisse que les mises à jour des contenus statiques soient accompagnées de nouveaux noms de fichiers, plutôt que d'écraser les fichiers existants.

Bien sûr, votre configuration locale peut remplacer les instructions définies dans les en-têtes.

Et oui, dans le contexte de Squid, un reverse proxy et un accélérateur web sont la même chose .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X