Varying by device type
    Ruslan Sivak 
    russ at vshift.com
       
    Thu Oct 14 05:48:52 CEST 2010
    
    
  
  We would like to vary by device type.  We have code that detects this 
when the first page on the website gets hit and then sets a device_group 
cookie.
I would like to have varnish cache these pages based on the value of the 
cookie.  I can't seem to get it to work.  Here is my code:
sub vcl_recv {
    if (req.http.Cookie) {
     set req.http.Cookie = ";" req.http.Cookie;
     set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
     set req.http.Cookie = regsuball(req.http.Cookie, 
";(device_group)=", "; \1=");
     set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
     set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
     if (req.http.Cookie == "") {
         remove req.http.Cookie;
     }
    }
}
sub vcl_fetch {
   if (beresp.http.set-cookie) {
     set beresp.http.set-cookie = ";" beresp.http.set-cookie;
     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "; 
+", ";");
     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, 
";(device_group)=", "; \1=");
     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, ";[^ 
][^;]*", "");
     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "^[; 
]+|[; ]+$", "");
     if (beresp.http.set-cookie == "") {
         remove beresp.http.set-cookie;
     }
    }
         set beresp.ttl = 5d;
}
sub vcl_hash { if (req.http.Cookie) { set req.hash += req.http.Cookie; } }
It seems that this should work, however it's not caching.  How can I 
make it cache even though a cookie is set?
Thanks in advance,
Russ
    
    
More information about the varnish-misc
mailing list