J'ai un système exécutant nginx / php-fpm / vernis / wordpress et amazon s3.
Maintenant, j'ai regardé beaucoup de fichiers de configuration lors de la configuration du système, et dans chacun d'eux, j'ai trouvé quelque chose comme ceci:
/* If the request is for pictures, javascript, css, etc */
if (req.url ~ "\.(jpg|jpeg|png|gif|css|js)$") {
/* Remove the cookie and make the request static */
unset req.http.cookie;
return (lookup);
}
Je ne comprends pas pourquoi cela se fait. La plupart des exemples exécutent également NginX en tant que serveur Web. Maintenant, la question est de savoir pourquoi utiliseriez-vous le cache de vernis pour mettre en cache ces fichiers statiques.
Il est beaucoup plus logique pour moi de ne mettre en cache que les fichiers dynamiques afin que php-fpm / mysql ne soit pas autant touché.
Ai-je raison ou manque-t-il quelque chose ici?
MISE À JOUR
Je veux ajouter quelques informations à la question en fonction de la réponse donnée.
Si vous avez un site Web dynamique, où le contenu change beaucoup, le chaching n'a pas de sens. Mais si vous utilisez WordPress pour un site Web statique par exemple, cela peut être mis en cache pendant de longues périodes.
Cela dit, le plus important pour moi est le contenu statique . J'ai trouvé un lien avec des tests et des tests de performances sur différentes applications de cache et applications de serveur Web.
http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/
NginX est en fait plus rapide pour obtenir votre contenu statique, il est donc plus logique de le laisser passer. NginX fonctionne très bien avec les fichiers statiques.
-
En dehors de cela, la plupart du temps, le contenu statique n'est même pas dans le serveur Web lui-même. La plupart du temps, ce contenu est stocké sur un CDN quelque part, peut-être AWS S3, quelque chose comme ça. Je pense que le cache de vernis est le dernier endroit où vous voulez avoir votre contenu statique stocké.
la source
if (req.url ~ "\.(png|gif|jp(e?)g|avi|flv|mp(e?)g|mp4|mp3)"){return(pass);}
dans vcl_recv (). Essentiellement, je ne veux pas mettre en cache les médias - mais je veux vraiment mettre en cache html (php) et même js / css (la théorie étant que les images contribuent moins au temps de chargement de la page perçue que la mise en page).Je pense que vous manquez peut-être quelque chose.
Par définition, les fichiers dynamiques changent. En règle générale, ils changent en effectuant une sorte de requête de base de données qui affecte le contenu de la page servie à l'utilisateur. Par conséquent, vous ne souhaitez pas mettre en cache le contenu dynamique. Si vous le faites, cela devient simplement du contenu statique et très probablement du contenu statique avec un contenu incorrect.
À titre d'exemple simple, supposons que vous ayez une page avec le nom d'utilisateur de l'utilisateur connecté en haut de la page. Chaque fois que cette page est chargée, une requête de base de données est exécutée pour déterminer quel nom d'utilisateur appartient à l'utilisateur connecté qui demande la page, ce qui garantit que le nom correct est affiché. Si vous mettiez en cache cette page, la requête de base de données ne se produirait pas et tous les utilisateurs verraient le même nom d'utilisateur en haut de la page et ce ne serait probablement pas leur nom d'utilisateur. Vous devez que cette requête se produise à chaque chargement de page pour garantir que le nom d'utilisateur approprié est affiché pour chaque utilisateur. Il n'est donc pas mis en cache.
Étendez cette logique à quelque chose d'un peu plus problématique comme les autorisations utilisateur et vous pouvez voir pourquoi le contenu dynamique ne doit pas être mis en cache. Si la base de données n'est pas atteinte pour le contenu dynamique, le CMS n'a aucun moyen de déterminer si l'utilisateur qui demande la page dispose des autorisations pour voir cette page.
Le contenu statique est, par définition, le même pour tous les utilisateurs. Par conséquent, aucune requête de base de données ne doit être effectuée pour personnaliser cette page pour chaque utilisateur, il est donc judicieux de la mettre en cache pour éliminer les requêtes de base de données inutiles. Les images sont un très bon exemple de contenu statique - vous voulez que tous les utilisateurs voient la même image d'en-tête, les mêmes boutons de connexion, etc., ils sont donc d'excellents candidats pour la mise en cache.
Dans votre extrait de code ci-dessus, vous voyez un extrait VCL Varnish très typique qui force les images, css et javascript à être mis en cache. Par défaut, Varnish ne mettra en cache aucune demande contenant un cookie. La logique étant que s'il y a un cookie dans la demande, il doit y avoir une raison pour laquelle le serveur a besoin de ce cookie, il est donc requis sur le serveur principal et doit être transmis via le cache. En réalité, de nombreux CMS (Drupal, Wordpress, etc.) attachent des cookies à presque tout, que cela soit nécessaire ou non. il.
Ça a du sens?
la source
Pour les contenus dynamiques , certains types de cotations boursières changent en fait souvent (mis à jour chaque seconde sur un à
SaaS server
partir de abackend server
) mais peuvent être interrogés encore plus souvent (par dizaines de millierssubscription clients
):Dans ce cas, la mise en cache sur la
SaaS server
mise à jour par seconde debackend servers
permet de satisfaire les requêtes de dizaines de milliers desubscription users
.Sans cache sur le serveur SaaS, ce modèle ne fonctionnerait tout simplement pas.
la source
La mise en cache de fichiers statiques avec Varnish bénéficierait en termes de déchargement de Nginx. Bien sûr, si vous avez beaucoup de fichiers statiques à mettre en cache, cela gaspillera de la RAM. Cependant, Varnish a une fonctionnalité intéressante - il prend en charge plusieurs backends de stockage pour son cache.
Pour les fichiers statiques: cache sur disque dur Pour tout le reste: cache sur RAM.
Cela devrait vous donner plus d'informations sur la façon de mettre en œuvre ce scénario: http://www.getpagespeed.com/server-setup/varnish-static-files-cache
la source