前两天写了一段比较霸道的VCL,但不敢放到varnish上去跑。虽然自己机器上测试什么的都正常,但生产系统上需求比较复杂,也许有自己没有注意到的地方缓存不对的话,又要找骂。
说霸道,是这个VCL将尽量进行缓存:静态文件缓存,recv里no-cache的lookup;有cookie的也lookup,在fetch里静态文件缓存,no-cache的或者private的缓存,带cookie的也缓存,hash加上cookie。
backend www3 {
.host = "192.168.11.23";
.port = "http";
}
backend www1 {
.host = "192.168.11.24";
.port = "80";
}
acl purge {
"localhost";
"192.168.11.0"/24;
}
sub vcl_recv {
if (req.http.host ~ "www.2tutu.com" || req.http.host ~ "blog.2tutu.com") {
set req.backend = www1;
}
else if (req.http.host ~ "www3.2tutu.com") {
set req.backend = www3;
}
else
{
error 200 "No cahce for this domain";
}
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
else{
lookup;
}
}
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
if (req.http.Expect) {
pipe;
}
if (req.http.Authenticate ){
pass;
}
if(req.url ~ "purge.php"){
pass;
}
if(req.url ~ "/dz/admin")
{
pass;
}
if (req.url ~ "\.(jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|js|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|wma|flv|wmv|sxw|zip|gz|bz2|tgz|tar|rar|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw|dmg|torrent|deb|msi|iso|rpm)$") {
lookup;
}
lookup;
}
sub vcl_pipe {
if (bereq.http.x-forwarded-for) {
set bereq.http.X-forwarded-for =
bereq.http.X-forwarded-for ", "
regsub(client.ip, ":.*", "");
} else {
set bereq.http.X-forwarded-for =
regsub(client.ip, ":.*", "") ;
}
pipe;
}
sub vcl_pass {
if (bereq.http.x-forwarded-for) {
set bereq.http.X-forwarded-for =
bereq.http.X-forwarded-for ", "
regsub(client.ip, ":.*", "");
} else {
set bereq.http.X-forwarded-for =
regsub(client.ip, ":.*", "");
}
pass;
}
sub vcl_hash {
set req.hash += req.url;
set req.hash += req.http.host;
set req.hash += req.http.cookie;
hash;
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
deliver;
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
fetch;
}
sub vcl_fetch {
if (!obj.valid) {
error;
}
if (obj.status == 404) {
pass;
}
set obj.ttl = 30000s;
if (req.url ~ "\.(jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|js|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|wma|flv|wmv|sxw|zip|gz|bz2|tgz|tar|rar|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw|dmg|torrent|deb|msi|iso|rpm)$") {
insert;
}
# if (obj.http.Pragma ~ "no-cache" || obj.http.Cache-Control ~ "no-cache" || obj.http.Cache-Control ~ "private") {
# pass;
# }
insert;
}
sub vcl_deliver {
deliver;
}
sub vcl_timeout {
discard;
}
sub vcl_discard {
discard;
}

订阅我的BLOG(RSS)