Varnish en WordPress

Varnish is een “state-of-the-art, high-performance HTTP accelerator” die door grote websites zoals Twitter, Facebook en WordPress.com gebruikt wordt om websites sneller te weergeven. De pagina’s worden gecached in het geheugen waardoor er niet elke keer een Apache-proces aangemaakt wordt.

In deze handleiding worden de volgende gegevens gebruikt

  • Varnish reageert op het IP 192.168.1.100 en poort 80. Deze reageert op alle websites die op dit adres terechtkomen
  • Apache draait op het IP 127.0.0.1 en poort 80. Deze reageert op alle aanvragen die Varnish doorstuurt en geeft het resultaat weer terug aan Varnish.
  • WordPress 3.0.x is geïnstalleerd op de Apache webserver.

Voordat Varnish voor Apache geïnstalleerd wordt moeten in Apache eerst een aantal parameters aangepast worden.

  1. In /etc/apache2/ports.conf:
    Verander Listen 80 (oid) naar Listen 127.0.0.1:80
  2. In /etc/apache2/sites-enabled/*.conf
    Verander in elk *.conf <VirtualHost *:80> naar <VirtualHost 127.0.0.1:80>

Herstart Apache om de wijziging door te voeren:

service apache2 restart

Varnish

Om Varnish te installeren:

aptitude install varnish

Vervolgens moet het configuratiebestand voor Varnish aangepast worden. Deze staat in /etc/varnish.

nano /etc/varnish/default.vcl

Pas het bestand aan zodat het overeenkomt met onderstaande tekst:

.host = "127.0.0.1"; #of ander publiek IP-adres
.port = "80";
}
sub vcl_recv {
# Normalize Content-Encoding
 if (req.http.Accept-Encoding) {
 if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|lzma|tbz)(\?.*|)$") {
 remove req.http.Accept-Encoding;
 } elsif (req.http.Accept-Encoding ~ "gzip") {
 set req.http.Accept-Encoding = "gzip";
 } elsif (req.http.Accept-Encoding ~ "deflate") {
 set req.http.Accept-Encoding = "deflate";
 } else {
 remove req.http.Accept-Encoding;
 }
 }
# Remove cookies and query string for real static files
 if (req.url ~ "^/[^?]+\.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.*|)$") {
 unset req.http.cookie;
 set req.url = regsub(req.url, "\?.*$", "");
 }
# Remove cookies from front page
 if (req.url ~ "^/$") {
 unset req.http.cookie;
 }
}
sub vcl_fetch {
 if (req.url ~ "^/$") {
 unset obj.http.set-cookie;
 }
}

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

Sla de wijziging op

Nu moet Varnish zelf nog aangepast worden zodat deze naar het IP 192.168.1.100 gaat luisteren en niet naar alle adressen (inclusief 127.0.0.1:80 waar Apache naar luistert) die de server beschikbaar heeft.

nano /etc/default/varnish

Verander de volgende regel:

DAEMON_OPTS=”-a :80 \ naar DAEMON_OPTS=”-a 192.168.1.100:80 \

Sla de wijziging op en herstart Varnish

service varnish restart

Wat de bovenstaande regels doen zijn alle cookies van de voorpagina verwijderen en alle dynamische pagina’s doorsturen naar de backend, oftewel de Apache webserver. Verder wordt in de header bij elk object weergegeven of het een HIT uit de cache was of een MISS. Bij de dynamische pagina’s wordt altijd een MISS weergegeven omdat hier cookies worden meegestuurd. De frontpage heeft (behalve de eerste keer) een HIT omdat deze direct uit de cache geladen wordt.

Laat een reactie achter

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *