2013-04-09 1 views
2

J'utilise nginx aux demandes de cache à mon backend uwsgi en utilisantnginx limiter la taille totale du cache

uwsgi_cache_path /var/cache/nginx/uwsgi keys_zone=cache:15M max_size=5G; 

Mon back-end est la fixation d'un très long expire en-tête (1 an +). Cependant, lorsque mon système s'exécute, je vois le cache se terminer à 15M. Il se lève à ce niveau, puis descend jusqu'à 10M.

Cela provoque beaucoup d'appels inutiles à mon back-end. Quand je change la taille de keys_zone il semble contrôler la taille du cache entier. Il semble ignorer le max_size et remplace à la place la taille keys_zone. (*)

Quelqu'un peut-il expliquer ce comportement? Y a-t-il un bug connu dans cette version? Ai-je manqué le point? Je ne veux pas affecter 5G au gestionnaire de cache ..

# nginx -V 
nginx version: nginx/1.2.0 
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
TLS SNI support enabled 
configure arguments: --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --with-http_stub_status_module 

(*) Mise à jour: Je suppose que cela a été mon imagination hyperactive essayant de trouver un modèle dans le chaos.

+1

Par défaut, votre cache inactif seront supprimées au bout de 10 min. Pourriez-vous augmenter ce nombre pour voir si cela fait une différence? http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path –

+0

Je pense que vous l'avez! Écrivez-le comme une réponse et je l'accepterai. Les docs ne sont pas vraiment clairs - je pensais depuis que j'utilisais un en-tête expiré qui surchargerait le paramètre inactif. J'aurais dû l'essayer moi-même. – Julian

+0

Droite. L'en-tête Expires (et d'autres en-têtes) est respecté par nginx pour déterminer si une réponse peut être mise en cache, mais elle n'est pas utilisée pour déterminer le temps de mise en cache. –

Répondre

5

Expires en-tête (and some other headers) est honoré par nginx pour déterminer si une réponse est cacheable, mais il n'est pas utilisé pour déterminer combien de temps pour le mettre en cache.

Par défaut, votre cache inactif sera supprimé après 10 min. Pourriez-vous augmenter ce nombre pour voir si cela fait une différence?

chemin de proxy_cache_path [niveaux de niveaux =] = keys_zone nom: taille [inactive = temps] [max_size = taille] [loader_files = nombre] [loader_sleep = Temps] [loader_threshold = temps];

Les données mises en cache qui n'ont pas été accédées pendant la durée spécifiée par le paramètre inactif sont supprimées de la mémoire cache quelle que soit leur fraîcheur . Par défaut, inactive est défini sur 10 minutes.

Référence: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path

+0

S'il vous plaît pouvez-vous montrer quelle partie de la documentation indique que l'en-tête expires n'est pas utilisé pour déterminer combien de temps pour le mettre en cache? J'ai lu _The cache honors "Expires" backend car il honore la date d'expiration réelle dans la valeur des en-têtes quand il cache. En d'autres termes, il l'invalidera automatiquement à l'heure d'expiration spécifiée. – Phil