J'ai un site web (avec ESI) qui utilise le reverse proxy de Symfony2 pour la mise en cache. La réponse moyenne est d'environ 100 ms. J'ai essayé d'installer Varnish sur le serveur pour l'essayer. J'ai suivi guide du livre de recettes Symfony étape par étape, a tout effacé dans cache
mais http_cache
était toujours créé lorsque je l'ai essayé. J'ai donc pensé que je pourrais essayer de commenter $kernel = new AppCache($kernel);
de app.php
. Ça a plutôt bien marché. http_cache
n'était plus créé et par varnishstat, Varnish semblait fonctionner :
12951 0.00 0.08 cache_hitpass - Cache hits for pass
1153 0.00 0.01 cache_miss - Cache misses
C'était sur environ 14 000 demandes, donc je pensais que tout irait bien. Mais après avoir vérifié, j'ai découvert que les réponses étaient passées à environ 2 secondes.
Apache fonctionne sur le port 9000 et Varnish sur le port 8080. J'ai donc échoué en utilisant echoping -n 10 -h http://servername/ X.X.X.X:8080
.
Je n'ai aucune idée de ce qui pourrait être mauvais. Y a-t-il des paramètres supplémentaires nécessaires pour utiliser Varnish avec Symfony2 ? Ou est-ce que je fais simplement quelque chose de mal ?
Selon les demandes, voici mon default.vcl
avec les modifications que j'ai faites jusqu'à présent.
J'ai trouvé 2 problèmes avec la configuration par défaut de Varnish :
- il ne met pas en cache les requêtes avec des cookies (et tout le monde dans mon application a une session assignée)
- il ignore
Cache-Control: no-cache
en-tête
J'ai donc ajouté des conditions pour ces cas à ma configuration et elle fonctionne assez bien maintenant (~175 req/s contre ~160 avec le proxy inverse S2 - mais honnêtement, je m'attendais à un peu plus). Je n'ai aucune idée de la façon de vérifier si tout est en ordre, donc toute contribution est la bienvenue.
La plupart des pages ont un cache varié par cookie, avec s-maxage
1200. Les éléments ESI communs ne varient pas en fonction du cookie, avec s-maxage
assez faible (articles, listes d'articles). Les pages de profil d'utilisateur ne sont pas du tout mises en cache ( no-cache
) et je ne suis pas vraiment sûr que les inclusions ESI sur ces derniers soient même mises en cache par Varnish. La seule ESI qui varie en fonction des cookies est l'en-tête contenant des informations spécifiques à l'utilisateur (c'est le cas sur 100% des pages).
Tout dans ce post est spécifique à Varnish 3.X (j'utilise personnellement 3.0.2).
De plus, après quelques semaines de travail, je n'ai plus aucune idée de ce que je fais, donc si vous trouvez quelque chose d'étrange dans les configurations, faites-le moi savoir.