导航

不许杀人,也不许放火

« 上午体力劳动郁闷,找不到字幕 »

霸道的VCL

前两天写了一段比较霸道的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;
}

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search

控制面板

首页

最近发表

友情链接

Powered By Z-Blog