Varnish Web Accelerator als Web Cache für nginx

fehlt wasgeht sogutsehr guthat geholfen (No Ratings Yet)
Loading ... Loading ...
Werbung




Schnelle Auslieferung der Webseiten ist das Ziel. Hierzu werden bereits schon viele Webserver und Konfigurationen getuned, Caches eingesetzt, SQL Abfragen gekürzt und auch wieder gecached. Der Besucher einer Webseite soll nicht warten. Jedoch gibt es ein Problem. Jeder Besucher der Webseite mach bei jedem Seitenaufruf eine Anfrage an den Webserver. Alleine dies kann einen Apache oder Nginx in die Knie zwingen.

Webseiten cachen mit varnish

varnish ist hierfür konzipiert worden. Diese Web-Accelerator-Cache bietet eine Besonderheit. Er cached die Seiten in einem eigenen Cache und liefert allen Besuchern, die die selbe Seite abfragen, diese aus dem Cache. An den Webserver wird nur noch eine Abfrage gestellt, die erste.Somit wird der Webserver entlastet, der Besucher erhält eine fertig generierte Webseite. Dazu lässt sich varnish noch sehr einfach und komplex Konfigurieren.

Ich möchte hier aber zunächst nur auf eine Standard-Konfiguration eingehen. Und man sollte sich eines vor Augen führen, varnish ist ein Cache. Dynamischen Seiten, die auf einen besonderen Besucher zugeschnitten sind, können nur schwer gecacht werden. Aber dies versuche ich noch in späteren How-Tos zu verfeinern.

Das Backend – der Webserver – ngix

Im Backend muss ein Webserver laufen. Ich bevorzuge hier nginx. Es ist im übrigen mit varnish möglich, mehrere Backendserver abzufragen. Diese können anhand von Urls oder anderen Spezifikationen unterschieden werden. So kann varnish auch als Loadbalancer fungieren. Aber auch hier eine zusätzliche Anleitung.

Zunächst intallieren wir wie gewohnt nginx mit allen benötigten Modulen wie php5 usw.
Danach wird der Server und die vhosts konfiguriert. Hierzu verweise ich auf diese Anleitung: Nginx und PHP5

Wichtig ist nun, dass der nginx Webserver auf einem andern Port läuft. Dazu muss in der vhost-Konfiguration nur eine Zeile geändert werden:

listen   8888;

Nachdem der nginx-Prozess neu gestartet wurde

# /etc/init.d/nginx restart

sollte im Browser die Seite auf Port 8888 zu erreichen sein.

Das Frontend – der Web Accelerator – varnish

Nun installieren wir das Frontend, der Part, der die Besucheranfragen annehmen soll. varnish ist im Debian Squeeze Repository enthalten:

# aptitude install varnish

Als nächsten müssen die Konfigurationsdateien bearbeitet werden, zunächst die Startoptionen in /var/default/varnish

# Should we start varnishd at boot?  Set to "yes" to enable.
START=yes

# Maximum number of open files (for ulimit -n)
NFILES=131072

# Maximum locked memory size (for ulimit -l)
# Used for locking the shared memory log in memory.  If you increase log size,
# you need to increase this number as well
MEMLOCK=82000

# Default varnish instance name is the local nodename.  Can be overridden with
# the -n switch, to have more instances on a single server.
INSTANCE=$(uname -n)

DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"

Dies veranlasst varnish auf Port 80 (dem Standard HTTP Port) zu lauschen. Die Administrator-Konsole ist von localhost auf Port 6082 erreichbar. Die Datei “default.vcl” wird als Konfigurations-Datei geladen und der Cache wird als Datei in “/var/lib/varnish/{rechnername}/varnish_storage.bin” angelegt und kann 1 GB groß werden.

Als nächstes Konfigurieren wir die Bedingungen in /etc/varnish/default.vcl

backend default {
.host = "127.0.0.1";
.port = "8888";
}

sub vcl_fetch {
set beresp.ttl = 5m;
set req.grace = 5m;
if (req.url ~ "^/w00tw00t") {
error 403 "Not permitted";
}
return(deliver);
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache = "MISS";
}
}

Diese Konfiguration ist sehr klein gehalten, funktioniert allerdings bei statischen Seiten bereits.

Der varnish-Cache soll bei Anfragen auf der IP 127.0.0.1 (localhost) und Port 8888 die Seiten abfragen. Dies ist unser nginx-Webserver.

Im “vcl_fetch” ist definiert, dass die Seite dann 5 Minuten gecacht werden sollen. Weiterhin gibt es für den “wootwoot” Wurm einen Auschluss.

Nun kann der varnish-Cache gestartet werden

# /etc/init.d/varnish start

und die Webseite sollte nun ganz normal über den Browser erreichbar sein.

Wichtig, wie bereits erwähnt, die Webseiten werden 5 Minuten gecacht und erst danach wieder vom Webserver abgefragt. Dynamische Seiten, die persönliche Informationen der Benutzer anzeigen, können mit dieser Konfiguration nicht gecacht werden. Dies wird aber in einem weiteren HowTo tiefer erklärt.



Werbung


2 Kommentare zu: Varnish Web Accelerator als Web Cache für nginx

  1. [...] varnish HTTP accelerator ist ein Proxy Programm, der vor einem Webserver geschaltet wird. Der Webserver muss dazu dann auf [...]

  2. [...] muss varnish installiert werden (Anleitung hier) und konfiguriert [...]

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>