how can I make varnish to just cache but don't deliver?

Kristian Lyngstøl kristian at varnish-software.com
Mon Jul 5 16:11:24 CEST 2010


On Mon, Jul 5, 2010 at 3:17 PM, Pahud <pahudnet at gmail.com> wrote:
> vcl_deliver(). So I tried this configuration
> sub vcl_deliver {
>          if (req.http.Cache-Control ~ "just-cache") {
>                error 200 "Cached";
>                return (pass);

return (pass); doesn't work from vcl_deliver, nor is it needed after
an error-statement.

>          }
>     return (deliver);
> }
> But no good luck. I guess vcl_deliver just can't get the value of
>  req.http.Cache-Control.
> Is it still possible to achieve this just with VCL?

Hmm. What you could do is:

In vcl_fetch: if (req.http.Cache-Control ~ "just-cache") { set
obj.http.X-Cache-Only = "true"; }
In vcl_deliver:

if (resp.http.X-Cache-Only == "true") {
    if (obj.hits == 0) {
        error 795 "Cached";
    } else {
        remove resp.http.X-Cache-Only;
    }
}

I used the error code 795 to differentiate from 200, so you can catch
it in vcl_error and strip most of the content of the error message if
you want to. You may use whatever error code you want, of course.

(I haven't tested this, but I don't see why it shouldn't work, except
perhaps syntax typos).

- Kristian



More information about the varnish-misc mailing list