Enkla Varnish ACL

När man av någon anledning vill använda Varnish till sin sajt stöter man ofta på problem med rättigheter till t.ex. admingränsnitt. Ofta har man en /admin/ som man bara vill att vissa IP-adresser skall ha tillgång till.

Kör man Apache har man kanske en regel i .htaccess-filen som ser ut ungefär som:
<Directory /path/to/admin>
Order Deny,Allow
Deny from all
Allow from nnn.nnn.nnn.nnn
</Directory>

Men eftersom HTTP-förfrågan, för Apache, ser ut att komma ifrån samma IP-adress som Varnishservern så kommer ovanstående regel inte att fungera som väntat. En enkel lösning kan då vara att använda sig av ACL:er i Varnish. Börja med att definiera upp en ACL-lista:
acl admin {
"nnn.nnn.nnn.nnn";
"nnn.nnn.nnn.0"/24;
}

Sedan, på lämplig plats under vcl_recv:
if (req.http.url ~ "^/admin/") {
if (client.ip ~admin) {
return (pass);
} else {
error 405 "Access denied.";
}
}

Med detta kommer bara de med en IP-adress som finns i admin-acl:en att få tillgång till /admin, glöm inte att lägga till din Varnishservers IP-adress i Allow from bara!