I mitt lilla projekt om att sätta upp ett eget CDN, Content Delivery Network så har jag nu konfigurerat om Nginx samt installerat Varnish. Det funkar så att Varnish ligger som gateway på port 80 och går igenom alla inkommande requests, om någon request matchar konfigurationen i Varnish så hanterar den det enligt gällande regler. För att uppnå det måste Nginx konfigureras om för att lyssna på en annan port, jag valde för enkelhetens skull port 8080.
Om du inte redan har installerat Nginx, så finns en guide här
Konfiguration av Nginx, ändra nedan i alla dina vhostar:
Listen 8080
Det gör att Nginx kommer att lyssna på port 8080 istället för 80, det är viktigt att ställa om det på alla vhostar, annars kommer nginx eller varnish inte starta om ordentligt. vill du kan du även skriva 127.0.0.1:8080 så kommer Nginx att bara lyssna på requests som kommer internt på maskinen och inte externt, jag väljer att inte skriva det då jag vill kunna komma åt webbservern direkt externt också, i testsyften.
Installation av Varnish
Varnish finns i Debian stabels paketförråd och installeras med:
apt-get install varnish
Sedan så är det mer eller mindre klart, varnish startas med /etc/init.d/varnish och loggdemonen med /etc/varnishlog start, med största sannolikhet är de redan startade.
Nu börjar det roliga, men samtidigt besvärliga, vad är det jag vill cacha? Jag har ett enkelt exempel där jag bara cachar statiska filer på en viss domän:
backend default {
set backend.host = “127.0.0.1″;
set backend.port = “8080″;
}
sub vcl_recv {
if (req.http.host ~ “http://cdn.sngw.se“) {
pass;
} else {
if (req.request != “GET” && req.request != “HEAD”) {
pipe;
}
if (req.request == “POST”) {
pass;
}
if (req.request == “GET” && req.url ~ “\.(jpg|jpeg|gif|ico|png)$”) {
lookup;
}
if (req.request == “GET” && req.url ~ “\.(css|js)$”) {
lookup;
}
if (req.request == “GET”) {
lookup;
}
lookup;
}
}
sub vcl_pipe {
pipe;
}
sub vcl_pass {
pass;
}
sub vcl_hit {
if (!obj.cacheable) {
pass;
}
if (req.http.Cookie) {
pass;
}
deliver;
}
sub vcl_miss {
fetch;
}
sub vcl_fetch {
if (!obj.valid) {
error;
}
if (!obj.cacheable) {
pass;
}
insert;
}
sub vcl_deliver {
deliver;
}
sub vcl_timeout {
discard;
}
sub vcl_discard {
discard;
}
De här reglerna cache:ar bara statiska filer och gör ingenting konstigt med dem. Nu är du redo att fortsätta upptäcka mer fantastiska grejer med Varnish ocg nginx, lycka till!