forcing cache under original url

David Birdsong david.birdsong at gmail.com
Mon Aug 31 08:52:56 CEST 2009


Actually, I've thought better of getting in the way of all the
redirects.  I can just hand all the objects back to the clients and
let varnish cache objects as they go past.  It just works.

On Sun, Aug 30, 2009 at 11:11 PM, David
Birdsong<david.birdsong at gmail.com> wrote:
> I'm trying to wrap my brain around the VCL needed to do what I'm
> thinking of, but it'd be helpful to know up front if what I'm trying
> to achieve isn't possible.
>
> I'm hoping to provide a backend of last resort for certain types of
> requests for the cases of
> 1. an actual down backend
> 2. where obj.status != 200 && req.request == "GET" && req.url ~
> "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|js|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|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)
>
> #2 means i can't rely on probes to set my backend to the backend of last resort.
>
> here's the pertinent vcl vcl_fetch
>
> sub vcl_fetch {
>        # force minimum ttl of 300 seconds
>        if (obj.ttl <  604800s) {
>                set obj.ttl = 604800s;
>        }
>        if (obj.status != 200)
>          if (req.restarts > 0) {
>            deliver;
>          }
>          if (req.request == "GET" && req.url ~
> "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|js|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|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)$")
> {
>            restart;
>          } else {
>            deliver;
>          }
>        }
> }
>
> sub vcl_recv {
>        if (req.restarts == 0) {
>          if (req.http.host ~ "^img3\.(.*)$") {
>                  set req.backend = b0;
>           } else {
>                  error 750 "invalid host header";
>          }
>        }
>  if (req.request == "GET" && req.url ~
> "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|js|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|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)$")
> {
>          if (! req.backend.healthy && req.restarts == 0) {
>            set req.backend = last_resort_backend;
>          }
>            lookup;
>        }
>       lookup;
> }
>
> I'm able to get varnish to re-send a failed request to
> last_resort_backend.  I'm still working on the necessary VCL to follow
> the 2 redirects that the last_resort_backend will send -I'd like
> varnish to complete these and not pass them on to the client.
>
>  What I'd like to do is instruct it to cache the static file under the
> original url, not the url of the last 302.
>
> My inexperience using varnish has me thinking about having to set the
> req.url for first the 301 and then again for the 302 combined with
> restarts, but this made me think that I'd have to store the original
> url somewhere and set it again.  Is this type of thing possible?
>
> Apologies if this is not clear.
>


More information about the varnish-misc mailing list