caching and hiding 302 redirects

Stroomer, Jeff Jeff.Stroomer at disney.com
Wed Sep 7 21:41:01 CEST 2011


Varnish folks,

I'm trying to combine Varnish with a Tomcat  servlet  to make a fancy reverse proxy.  The idea is that Varnish forwards a URL to the servlet, which uses a 302 redirect to tell Varnish what the "real" URL should be.  For this to work well I need Varnish to do two things: 1) cache the 302 redirects from the servlet, and also 2) hide the redirect from the client.  It seems like I can get  Varnish to do one or the other, but not both simultaneously.

I'm using the following in default.vcl (which is more or less the approach described in http://www.gossamer-threads.com/lists/varnish/dev/15409):

sub vcl_fetch {
  if (beresp.status == 302) {
    set req.url = beresp.http.Location;
   restart;
  }
}

This works, and hides the redirect from the client, but doesn't cache the 302 response.  I also tried this:

sub vcl_fetch {
  if (beresp.status == 302) {
    set req.url = beresp.http.Location;
   return(deliver);
  }
}

This also works, and caches the 302 response, but does not hide the 302 from the client.

I am guessing that vcl_deliver is the subroutine in which back-end responses get pushed into the cache, which means that if I hide the redirect by doing a restart, then I lose my chance to cache the 302 response.

Is this right?  Any suggestions as to how I can cache the 302 response and also hide the redirect from the client?

Jeff

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20110907/cf11266f/attachment-0003.html>


More information about the varnish-misc mailing list