backend default {
.host = "{string hostname or ip_address}"; #if you don't know, this reads 'localhost'
.port = "{int port_its_running_on}"; #you set this in httpd.conf
}
acl purge { /*set some servers to be authorized to clear the cache*/
"{string hostname or ip_address}"; #if you don't know, this reads 'localhost'
}
sub vcl_recv {
set req.grace = 6h;
if (req.request == "PURGE") {
if(!client.ip ~ purge) {
error 405 "Not allowed.";
}
purge("req.url ~ ^" req.url "$ && req.http.host == "req.http.host);
}
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;
}
if ( (req.url ~ "wp-(login|admin)") || (req.http.Cookie ~ "wordpress_logged_in_") || (req.http.Cookie ~ "comment_author") || (req.url ~ "piwik") ) {
return (pass);
}
if (req.request != "GET" && req.request != "HEAD") {
return (pass);
}
unset req.http.cookie;
if (req.url ~ "\.(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)(\?.*|)$") {
unset req.http.Authenticate;
unset req.http.POSTDATA;
set req.request = "GET";
set req.url = regsub(req.url, "\?.*$", "");
}
}
sub vcl_pipe {
set bereq.http.connection = "close";
if (req.http.X-Forwarded-For) {
set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
sub vcl_pass {
set bereq.http.connection = "close";
if (req.http.X-Forwarded-For) {
set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
sub vcl_fetch {
set beresp.ttl = 1h;
set req.grace = 6h;
if ( (req.url ~ "wp-(login|admin)") || (req.http.Cookie ~ "wordpress_logged_in_") || (req.http.Cookie ~ "comment_author") || (req.url ~ "piwik") ) {
return (pass);
}
unset beresp.http.set-cookie;
if (req.url ~ "\.(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)$") {
set beresp.ttl = 24h;
}
}
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";
}
}