Contents
Sysadmins will want VarnishMaintenance.
Quick howto
Un site aegir dans varnish en deux étapes faciles:
admin/settings/performance -> External cache, page cache maximum age: 1min, page cache minimum age: 1min
- point DNS to cache.koumbit.net
Il y a une couple de gotchas expliqués plus bas par contre, ainsi que des méthodes de tests pour assurer une coupure de service minimale.
À noter que Varnish va respecter les réglages de lifetime des cache de Drupal. Il est donc utile de régler une cache, même si le lifetime est de seulement une minute.
Ajouter un site à Varnish
- ajouter le code suivant à local.settings.php (car notre Aegir force la cache):
<?php global $conf; unset($conf['cache']);
- configurer la cache de Drupal/Pressflow pour être "External" dans admin/settings/performance
Ceci peut demander de désactiver des modules qui supportent pas le aggressive caching, par exemple statistics ou boost. Il est possible de laisser certains modules actifs (exemple: i18n), mais certaines fonctionnalités sont, par définition, incompatibles avec le caching aggressif (exemple: une page d'accueil différente selon la langue, solution: un splash page).
- Mettre l'option Durée de vie minimale de la mémoire cache : a 30 m (sinon au minimum: 1 min)
- Mettre l'option Page cache maximum age à 1 jour (sinon au minimum: 1 min)
tester que le Drupal renvoit bien les bons headers, avec curl -I http://example.com/, on devrait voir:
Cache-Control: public, max-age=600 Vary: Cookie,Accept-Encoding
- ... et pas de header "Cookie"
Tester que varnish peut bien cacher la page, avec curl -x http://cache0.koumbit.net:80/ -I http://example.com/, on devrait voir:
Age: 2 Via: 1.1 varnish
- avec le "age" qui s'incrémente
Attention l'option -x n'est pas la meilleure parce que tout l'argument est passé au backend. La meilleure méthode de test reste de changer son /etc/hosts en local
créer un domaine varnish.example.com qui pointe vers cache.koumbit.net
s'assurer que varnish.example.com est dans la liste d'alias, sans redirection, du site dans Aegir
faire un benchmark de varnish.example.com. les choses à vérifier:
que curl -I http://example.com/ a des lignes comme suit:
X-Varnish: 425187551 425175452 Age: 28672 Via: 1.1 varnish
- l'âge doit augmenter
s'assurer que ab -c 1 -n 100 donne de meilleurs résultats que le site statique
Il est possible que les résultats ne varient pas beaucoup si la bande passante du site de test est insuffisante (exemple: derrière un DSL, ce n'est pas suffisant).
faire que le domaine principal (example.com ou www.example.com) pointe vers cache.koumbit.net
Modules that break caching and how to fix them
Ex: CiviCRM, global redirect
References
Drupal is tricky to cache. A basic performance optimisation job should be done on the site even before putting it in Varnish, see the DrupalPerformance guide.
Drupal-specific caching issues
A good start is those indymedia docs.
Timestamp check (D7)
ip_address still buggy (fixed in D6)
Drupal supports disabling anonymous sessions (D7). For D6 you can use no_anon (no module yet for D5)
better caching for reverse proxies Varnish config (D7) (D6 port)
reverse proxy support for Drupal.org (D6 backport of the last two)
For webform submission or other situations, sometimes Drupal needs the IP of the submitter. In such a case, you need to add the following lines to settings.php:
$conf['reverse_proxy'] = TRUE; $conf['reverse_proxy_addresses'] = array('199.58.80.105'); // Change this IP to that of the varnish cache