web-dev-qa-db-fra.com

Comprendre la directive nginx proxy_cache_path

Supposons que j'ai ce fichier de configuration nginx

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Que fait le keys_zone=myCache:8m signifier? Il n'y a pas grand-chose à dire dans les documents:

De plus, toutes les clés actives et les informations sur les données sont stockées dans une zone de mémoire partagée, dont le nom et la taille sont configurés par le paramètre keys_zone.

  • Et qu'est-ce qui se passerait si proxy_cache_valid (12h) est supérieure à la valeur inactive spécifiée (1h) dans proxy_cache_path? Quelle règle suivra-t-elle? par exemple.

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Merci!

31
Jürgen Paul

Que signifie key_zone = myCache: 8m?

Comme documentation dit , nginx conservera toutes les clés actives et les informations sur les données sont stockées dans une zone de mémoire partagée, dont name et size sont configurés par le paramètre keys_zone. Par souci d'exhaustivité, permet de décomposer par partie

  • /var/cache/nginx est l'endroit où le cache réel est stocké. À l'intérieur du dossier, le fichier cache était un fichier binaire, mais vous pouvez facilement repérer la balise html à l'intérieur.
  • levels=1:2 Le paramètre niveaux définit le nombre de niveaux de sous-répertoires dans le cache.
  • keys_zone=myCache:8m définissait une zone de mémoire partagée nommée myCache avec une taille maximale de 8 Mo. Il contient toutes les clés actives et métadonnées du cache. Ainsi, chaque fois que nginx vérifie si une page a été mise en cache, il consulte d'abord la zone de mémoire partagée, puis recherche l'emplacement du cache réel dans /var/cache/nginx si le cache existe.
  • max_size était la taille maximale du cache, par exemple taille des fichiers sur /var/cache/nginx.
  • inactive=1h spécifie que le cache de temps inactif maximum peut être stocké. Les données mises en cache qui ne sont pas accessibles pendant la durée spécifiée par le paramètre inactive sont supprimées du cache quelle que soit leur actualité.

Fonctionnement de la validation et de la suppression du cache

Tiré de listes de diffusion nginx

  • La directive proxy_cache_valid spécifie combien de temps la réponse sera considérée comme valide (et sera retournée sans aucune demande de backend). Passé ce délai, la réponse sera considérée comme "périmée" et ne sera pas retournée ou dépendra du paramètre proxy_cache_use_stale .

  • L'argument inactif de proxy_cache_path spécifie combien de temps la réponse sera stockée dans le cache après dernière utilisation. Notez que même les réponses périmées seront considérées comme récemment utilisées en cas de demande.

Si je comprends bien, voici le pseudocode comment fonctionne nginx

Lorsque la demande arrive

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

Dans un autre processus, le gestionnaire de cache exécute cette logique

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Que faire si proxy_cache_valid (12h) est supérieur à la valeur inactive spécifiée (1h) dans proxy_cache_path?

Tant que la demande et a accédé au cache particulier, cet objet de cache sera toujours valide jusqu'à 12h après que l'objet a été mis en cache. Après cela, le cache a été considéré comme non valide, donc nginx va récupérer du backend et réinitialiser le temporisateur valide. Mais si l'objet était inactif (inaccessible) plus d'une heure - même dans 12h valid-cache-period -, nginx le supprimera à cause de inactive paramètre.

41
masegaloeh