VCL help needed

Patrick Giagnocavo patrick at zill.net
Tue Jan 30 07:16:48 CET 2007


I have been using varnish for a particular web blog/forum app, so far 
it is working well, except that forum users get confused when they 
delete or add a post and do not see the changed page immediately; so 
they either double-click (meaning a duplicate post) or try to delete 
something that has already been deleted.

In any case, the first rule is "don't confuse the user", so since I 
have trained the users to expect one kind of behavior I can't expect 
them to automatically adjust to a different behavior.

I ended up commenting out the vcl_fetch routine in the default vcl.conf 
and setting default_ttl to 15 seconds on the command line.  Basically 
this is almost disabling the cache (hits are 10% or so).

Based on my reading, what I think will work best, is to set default_ttl 
to a very low value like 5 seconds, then use a regexp to specify 
explicitly what should be cached.

This works because what I want to cache are the .css, .gif, .jpg, .swf, 
.mp3 files - since virtually all the actual HTML is dynamically 
generated out of a database, simply off-loading the delivery of other 
files is the key thing I want varnish to do.

e.g. "if filename ends in .gif|.jpg|.css|.mp3 add to cache and set 
timeout to 600 seconds" ; otherwise default_ttl at 5 seconds will 
expire the page and eliminate double-clicks and double-deletes.

Can I put a regexp in the vcl_fetch routine?  Just add something like 
this to the stock vcl.conf:

sub vcl_fetch {
        if (req.url  - "/.css|.gif|.jpg|.mp3|.swf/") {

              # force minimum ttl of 600 seconds (mod from orig. 180s)

		      if (obj.ttl < 600s) {
                   set obj.ttl = 600s;
                   }
              }
}

I am sure I have the syntax wrong, and the regular expression is wrong; 
but I think I am clear on what I am trying to do.

Cordially
Patrick Giagnocavo
patrick at zill.net




More information about the varnish-misc mailing list