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.
- In /etc/apache2/ports.conf:
Verander Listen 80 (oid) naar Listen 127.0.0.1:80 - 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.