Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Produktivserver Caching Varnish

Varnish

erstellt von Veit Schiele zuletzt verändert: 16.06.2010 14:50
Mitwirkende: Andreas Jung
© Veit Schiele 2008–2010

Varnish ist ein Caching Reverse Proxy, d.h. er sitzt unmittelbar vor dem Web-Server und cached die ausgehenden Inhalte.

Varnish kann mit Buildout heruntergeladen, kompiliert und konfiguriert werden. Hierzu tragen Sie folgendes in Ihre deployment.cfg-Datei ein:

[buildout]
parts =
...
varnish-build
varnish-instance
…
[varnish-build]
recipe = zc.recipe.cmmi
url = http://downloads.sourceforge.net/varnish/varnish-2.0.6.tar.gz

[varnish-instance]
recipe = plone.recipe.varnish:instance
daemon = ${buildout:directory}/parts/varnish-build/sbin/varnishd
bind = 8000
cache-size = 1G
config = ${buildout:directory}/etc/plone.vcl

Anmerkung 1: Wird Varnish auf Mac OS X mit plone.recipe.varnish installiert, wird automatisch ein Patch mitinstalliert. Weitere Informationen erhalten Sie unter http://varnish.projects.linpro.no/ticket/118.

Anmerkung 2: Falls Sie als Caching Reverse Proxy lieber Squid verwenden möchten, steht auch hierfür ein Rezept bereit: plone.recipe.squid

Anmerkung 3: Wenn Varnish zusammen mit dem Apache-Webserver verwendet wird, muss die CacheFu-Konfiguration auf Squid/Varnish behind Apache gesetzt werden.

Eine examplarische Varnish-Konfigurationsdatei finden Sie hier: plone.vcl. In ihr wird das Backend spezifiziert, das auf localhost an Port 8080 läuft und erlaubt Anfragen via HTTP-Basic Authentication oder Cookie-basierte Authentifizierung. Anschließend können Sie Varnish mit dieser Konfigurationsdatei und 1 GB Cache am Port 8100 starten mit:

$ ./bin/varnish-instance

Anmerkung 4: Varnish erlaubt auch Load Balancing zwischen verschiedenen Instanzen. Hierzu wird statt der Angaben zu backend default folgendes angegeben:

backend instance1 {
    .host = "127.0.0.1";
    .port = "8081";
    .probe = {
              .url = "/";
              .interval = 5s;
              .timeout = 1 s;
              .window = 5;
              .threshold = 3;
    }
}

backend instance2 {
    .host = "127.0.0.1";
    .port = "8082";
    .probe = {
              .url = "/";
              .interval = 5s;
              .timeout = 1 s;
              .window = 5;
              .threshold = 3;
    }
}

backend sorryserver {
    .host = "localhost";
    .port = "80";
}

director zeo round-robin  {
     {
        .backend = instance1;
    }
     {
        .backend = instance2;
    }
}

…

sub vcl_recv {

    set req.backend = zeo;
    …
    if (! req.backend.healthy)  {
        set req.backend = sorryserver;
        return(pass);
    }
    …
}
probe
gibt in unserem Fall an, dass Varnish das /-Objekt alle 5 Sekunden aufruft. Falls die Antwort länger als eine Sekunde ausbleibt, nimmt Varnish an, dass das Backend nicht erreichbar ist. Umgekehrt nimmt Varnish an, dass das Backend erreichbar ist wenn drei der letzten fünf Verbindungsversuche erfolgreich waren. Weitere Informationen hierzu erhalten sie in backend health polling.
round-robin
zeigt an, dass die Anfragen zufällig an die Backends weitergegeben werden.

Allgemeine Informationen zum Load-Balancing mit Varnish erhalten Sie unter LoadBalancing.

Artikelaktionen