Varnish sending 304 back to client on cache miss
kbagga at adobe.com
Mon Apr 15 14:57:08 CEST 2013
I am facing an issue where Varnish sends a "If-Modified-Since" header for a cache-miss object.
I will briefly describe the system architecture and the problem for your reference. I have varnish logs saved and can share them as well.
1) We have 4 varnish instances running on machine each fetching requests from one backend server. We also have a load balancer in front of these 4 varnishes.
2) We start Varnish processes using : varnishd -f /etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2001 -a 0.0.0.0:8081 -n v1
(similarly for v2, v3 and v4). This should make sure that the caches are in memory and exclusive to each varnish instance.
3) We get 200 OK for a URL, and it's there on delivered from the varnish cache; suddenly we get a 304 Not modified in one of the clients and that messes up our playback (this is usually when varnish is under load)
4) On analysis, I figured out that If-Modified-Since header was received at the server end (I can see the header in the Apache logs), since the object was not modified, server returned a 304.
But till then the object was available in the varnish cache. Did Varnish try to invalidate it's cache (as the object ttl was set to 2 seconds). If it did so, shouldn't it keep the object in cache if the server returns a 304?
5) I don't see client adding this header
6) If I do varnishlog -b, I see a request for this URL from varnish(say v1) to backend and also this was a cache miss.
My doubt here is, how does Varnish add If-Modified-Since header if it was a cache miss?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the varnish-misc