Revision 20 as of 2012-10-18 16:28:28

Clear message

(!) Sysadmins will want VarnishMaintenance.

Quick howto

Un site aegir dans varnish en deux étapes faciles:

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

  1. ajouter le code suivant à local.settings.php (car notre Aegir force la cache):
    • <?php global $conf; unset($conf['cache']);
  2. 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).

  3. Mettre l'option Durée de vie minimale de la mémoire cache : a 30 m (sinon au minimum: 1 min)
  4. Mettre l'option Page cache maximum age à 1 jour (sinon au minimum: 1 min)
  5. 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"
  6. 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

  7. créer un domaine varnish.example.com qui pointe vers cache.koumbit.net

  8. s'assurer que varnish.example.com est dans la liste d'alias, sans redirection, du site dans Aegir

  9. 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).

  10. 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.

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

Other references and alternatives


CategoryGuide