Table des matières
Varnish permet de mettre en cache les page de votre site web et se substitue à Apache pour augmenter de façon très net les performances du serveur.
Varnish interprète les requêtes http. Si la ressource est disponible ou pas dans le cache, il questionne le serveur http (Apache dans notre cas) et stocke le résultat en cache avant de le retourner au client. Voici un petit schéma récapitulatif
Vous pouvez envoyez les requêtes sur un autre port que le port 80 pour les tests Pour une utilisation normale, Varnish devra intercepter les requêtes du port 80. Varnish utilise la requête HTTP pour identifier les pages et pas uniquement l'url de la page. Si deux clients ont des requêtes différentes (cookies par exemple) alors la page sera en cache autant de fois qu'il y a de client ! Il est bien-sûr possible de changer ce comportement comme nous le verrons dans la partie configuration de Varnish. Enfin un problème qui m'a bloqué, les pages générant des cookies ou ayant "must-revalidate" dans le paramètre cache-control du header ne sont pas mises en cache.
L’installation de Varnish est très simple si vous avez une Ubuntu ou une Debian :
sudo apt-get install varnish
Parce que cache Symfony2 utilise les en-têtes standards cache HTTP, le proxy inverse de http cache de symfony2 peut facilement être remplacé par n'importe quel autre reverse proxy. Varnish est un puissant, open-source, l'accélérateur HTTP capable de servir le contenu mis en cache rapidement et y compris Edge Side Includes de http cache de symfony2
Comme vu précédemment, Symfony2 est assez intelligent pour détecter si elle parle à un proxy inverse qui comprend ESI ou non. Il travaille à partir de la boîte lorsque vous utilisez le proxy inverse Symfony2, mais vous avez besoin d'une configuration spéciale pour le faire fonctionner avec Varnish. Heureusement, Symfony2 s'appuie sur une autre norme écrite par Akamai ( EDGE Architecture ), de sorte que les conseils de configuration dans le présent chapitre peut être utile même si vous n'utilisez pas Symfony2.
Varnish prend uniquement en charge l'attribut src pour les balises ESI (attributs alt et onerror sont ignorés).
Tout d'abord, configurer Varnish afin qu'il puisse soutenir ESI en ajoutant un en-tête de substitution-Capacité à des demandes transmises à l'application backend:
sub vcl_recv { set req.http.Surrogate-Capability = "abc=ESI/1.0"; }
Puis, à optimiser Varnish de sorte qu'il analyse uniquement les contenus de réponse quand il y a au moins une étiquette ESI en vérifiant l'en-tête de substitution-contrôle qui Symfony2 ajoute automatiquement:
sub vcl_fetch { if (beresp.http.Surrogate-Control ~ "ESI/1.0") { unset beresp.http.Surrogate-Control; // for Varnish >= 3.0 set beresp.do_esi = true; // for Varnish < 3.0 // esi; } }
Compression avec ESI n'a pas été pris en charge dans la version 3.0 jusqu'à ce Varnish (lire GZIP et Varnish ). Si vous n'êtes pas en utilisant 3,0 Varnish, mettre un serveur web en face de Varnish pour effectuer la compression.
Vous ne devriez jamais avoir à invalider les données mises en cache parce que l'invalidation est déjà pris en compte nativement dans les modèles de cache HTTP (voir l'invalidation du cache ).
Pourtant, Varnish peut être configuré pour accepter une méthode spéciale PURGE HTTP qui invalider le cache pour une ressource donnée:
sub vcl_hit { if (req.request == "PURGE") { set obj.ttl = 0s; error 200 "Purged"; } } sub vcl_miss { if (req.request == "PURGE") { error 404 "Not purged"; } }
Vous devez protéger la méthode HTTP PURGE en quelque sorte à éviter que les gens au hasard de purge vos données mises en cache.
http://binbash.fr/2011/09/17/surveiller-lactivite-de-varnish-3-avec-varnishstat/
Varnishstat est un outil qui permet de voir les statistiques du cache Varnish en temps réel. C’est un outil très pratique pour s’assurer que Varnish fonctionne correctement. On peut y retrouver par exemple le hit ratio (rapport entre HIT et MISS), le nombre d’objets en cache, le nombre de threads Varnish, les requêtes en attente… Autant de valeurs qui permettront d’avoir une idée sur les performances de Varnish et sur les limites système qu’il peut rencontrer.