J'ai entendu dire récemment que Nginx avait ajouté la mise en cache à sa fonctionnalité de proxy inverse. J'ai regardé autour mais je n'ai pas trouvé beaucoup d'informations à ce sujet.
Je souhaite configurer Nginx en tant que proxy inverse de mise en cache devant Apache / Django: pour avoir des requêtes de proxy Nginx pour certaines pages dynamiques (mais pas toutes) vers Apache, puis pour mettre en cache les pages générées et pour servir les demandes ultérieures de ces pages à partir du cache.
Idéalement, je voudrais invalider le cache de 2 manières:
- Définir une date d'expiration sur l'élément mis en cache
- Invalider explicitement l'élément mis en cache. Par exemple, si mon serveur Django a mis à jour certaines données, je voudrais dire à Nginx d'invalider le cache des pages affectées.
Est-il possible de configurer Nginx pour le faire? Comment?
proxy
nginx
reverse-proxy
varnish
Continuation
la source
la source
Réponses:
Je ne pense pas qu'il y ait un moyen d'invalider explicitement les éléments mis en cache, mais voici un exemple montrant comment faire le reste. Mise à jour: Comme l'a mentionné Piotr dans une autre réponse, il existe un module de purge de cache que vous pouvez utiliser. Vous pouvez également forcer l'actualisation d'un élément mis en cache à l'aide de proxy_cache_bypass de nginx - voir la réponse de Cherian pour plus d'informations.
Dans cette configuration, les éléments qui ne sont pas mis en cache seront extraits de example.net et stockés. Les versions mises en cache seront servies aux futurs clients jusqu'à ce qu'elles ne soient plus valides (60 minutes).
Vos en-têtes HTTP Cache-Control et Expires HTTP seront respectés. Par conséquent, si vous souhaitez définir explicitement une date d'expiration, vous pouvez le faire en définissant les en-têtes corrects dans tout ce que vous transmettez par proxy.
Vous pouvez régler de nombreux paramètres. Pour plus d’informations sur cette opération, reportez-vous à la documentation du module Proxy de nginx, notamment sur la signification des différents paramètres / paramètres: http://nginx.org/r/proxy_cache_path
la source
inactive=600m
signifie? N'est-ce pasinactive
supposé être le temps? `[inactive=time]
Vous pouvez spécifiquement invalider les pages en cache via
Dites que vous voulez mettre en cache une page, définissez le cache de cette façon
Maintenant, quand vous voulez invalider cette page et mettre en cache à nouveau
Faire un appel secret curl avec l'en-tête
Il sera invalidé et mis en cache.
Fonctionne à partir de nginx 0.7.
En prime, vous
add_header X-Cache-Status
pouvez vérifier si la page est en cache ou non.la source
Je vous suggère d' essayer Varnish . Varnish est spécifiquement conçu comme un cache de proxy inverse. Il honorera tous les en-têtes de contrôle de cache que vous envoyez à partir du serveur d'origine, ce qui satisfait votre première demande.
Pour votre deuxième demande, invalidation explicite. Ma recommandation est fortement de changer le nom de l'URL de la ressource que vous souhaitez invalider, soit en renommant le fichier, soit en utilisant une forme de bus de cache de chaîne de requête. Varnish a une
PURGE
opération qui supprimera la ressource du cache de Varnish, mais elle ne vous donnera pas le contrôle sur les autres caches entre vous et l'utilisateur. Comme vous avez dit vouloir purger explicitement une ressource, les en-têtes de contrôle http standard ne vous aideront pas. Dans ce cas, le moyen le plus sûr de vaincre la mise en cache d'une ressource est de la renommer.la source
style.v123.css
parce que certains caches ne mettront pas en cache les demandes comportant une chaîne de requête.Pour invalider les pages sélectionnées, vous pouvez utiliser le correctif "cache_purge" pour nginx-0.8.x qui fait exactement ce que vous voulez;)
C'est disponible ici .
la source
La plupart des outils de mise en cache (Citrix) autorisent une actualisation forcée (Ctrl + r) pour repeupler une page mise en cache.
Voici une astuce que j'ai trouvée pour faire quelque chose de similaire dans nginx.
Cela suppose que lorsque vous faites un Ctrl + r dans votre navigateur, l'en-tête Cache-Control a max-age = 0 dans sa demande. Je sais que Chrome le fait, mais je n'ai pas essayé dans d'autres navigateurs. Il est facile d’ajouter d’autres champs d’en-tête, il suffit d’en ajouter d’autres si les instructions définissent la
$eac
variable sur 1.la source
La mise en cache est une fonction assez nouvelle dans nginx (et pas si bien documentée pour le moment), mais suffisamment stable pour être utilisée en production.
Utiliser la documentation anglaise
Demander dans les listes de diffusion
Traduire la documentation russe avec quelque chose comme Google Translate
Utiliser du vernis
la source
Je crois que NginxHttpProxyModule est capable d’appeler les requêtes http. Recherchez les directives commençant par:
Oui, il est possible de contrôler le comportement du cache via des directives telles que:
la source
Sur la base du fait que vous ne pouvez pas trouver de documents sur celui-ci, je serais un peu méfiant quant à son utilisation en production. Avez-vous envisagé de vernir? C'est mon "nginx des proxys inverses", petit, léger, qui fait un travail et le fait bien.
la source
Si vous utilisez les balises eTags sur votre application et que vous placez nginx devant elle, elle se chargera de l'expiration, car si l'eTag change, le cache sera invalidé.
la source
Vous pouvez contrôler l'expiration du cache de Nginx avec plusieurs directives / paramètres:
proxy_cache_valid 200 302 10m;
Expires
Cache-Control
X-Accel-Expires
le
inactive
paramètre dans laproxy_cache_path
directive:proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;
Je recommande mon billet de blog si vous souhaitez en savoir plus sur la mise en cache Nginx.
Le sujet de la purge est vraiment intéressant car cette fonctionnalité n'existe que dans Nginx Plus (édition commerciale de Nginx). J'aime beaucoup la réponse @ randy-wallace. Mais il y a aussi d'autres possibilités comme le module ngx_cache_purge .
La chose la plus simple que vous puissiez faire est de supprimer manuellement le fichier en cache:
générer votre clé de hachage:
supprimez le fichier du système de fichiers:
la source
Pour les futurs visiteurs: En attendant, le proxy inverse nginx intègre la mise en cache. Les documents sont disponibles à l'adresse suivante:
la source
Cela crée un cache pour / img / location. C'est dans / opt / nginx-cache. Les objets sont mis en cache pendant 1 minute.
Vous pouvez écrire différents codes de réponse au lieu de n’importe lequel.
Maintenant, vous ne pouvez pas invalider le cache pour les pages sélectionnées. Peut-être que dans 0.8.x ce sera possible.
la source
Il existe un plugin nginx appelé ncache qui prétend être "un système de cache Web basé sur un serveur Web nginx. Plus rapide et plus efficace que squid".
la source