You can set the Varnish ttl in many ways. Some set it with hard values in the vcl some prefer to give the ttl via a header setting with the requested site. To set the ttl in varnish 2 and 3 you could use inline C code like the one below:
# this on the beginning of the vcl C{ #include <stdlib.h> }C ... sub vcl_fetch { ... if (beresp.http.X-CacheTime) { C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_BERESP, "\023X-CacheTime:"); VRT_l_beresp_ttl(sp, atoi(ttl)); }C } ... }
With Varnish 4 the code must be changed a little bit, because the function declaration of VRT_GetHdr has changed. To migrate your Varnish 2 or 3 vcl you have to use this code in your vcl_fetch:
C{ char *ttl; const struct gethdr_s hdr = { HDR_BERESP, "\023X-CacheTime:" }; ttl = VRT_GetHdr(ctx, &hdr); // number of chars VRT_l_beresp_ttl(ctx, atoi(ttl)); }C