title: Varnish keeps missing cache ,cookies?
body: <p>I have a bit of trouble getting varnish to cache correctly.</p>
  
  <p>When I go to a page and hit refresh , varnish will return the cached page.
  But if I use another computer and hit that same page again ( within the cache time-frame)  it will report a MISS.</p>
  
  <p>I used the cpanel varnish plugin from  <a href="http://www.unixy.net/varnish" rel="nofollow">http://www.unixy.net/varnish</a><br>
  I removed session_start() from my (php) pages and I do not need userbased cookies.<br>
  I am also using google analytics.</p>
  
  <p>This is my  default.vcl </p>
  
  <pre><code>###################################################
  # Copyright (c) UNIXY  -  http://www.unixy.net    #
  # The leading truly fully managed server provider #
  ###################################################
  
  include "/etc/varnish/cpanel.backend.vcl";
  
  include "/etc/varnish/backends.vcl";
  
  sub vcl_recv {
  
  # Use the default backend for all other requests
  set req.backend = default;
  
  # Setup the different backends logic
  include "/etc/varnish/acllogic.vcl";
  
  # Allow a grace period for offering "stale" data in case backend lags
  set req.grace = 5m;
  
  remove req.http.X-Forwarded-For;
  set req.http.X-Forwarded-For = client.ip;
  
  # cPanel URLs
  include "/etc/varnish/cpanel.url.vcl";
  
  # Properly handle different encoding types
  if (req.http.Accept-Encoding) {
      if (req.url ~ "\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|ico)$") {
          # No point in compressing these
          remove req.http.Accept-Encoding;
      } elsif (req.http.Accept-Encoding ~ "gzip") {
          set req.http.Accept-Encoding = "gzip";
      } elsif (req.http.Accept-Encoding ~ "deflate") {
          set req.http.Accept-Encoding = "deflate";
      } else {
          # unkown algorithm
          remove req.http.Accept-Encoding;
      }
  }
  
  # Set up disabled
  include "/etc/varnish/disabled.vcl";
  
  # Exclude upgrade, install, server-status, etc
  include "/etc/varnish/known.exclude.vcl";
  
  # Set up exceptions
  include "/etc/varnish/url.exclude.vcl";
  
  # Set up exceptions
  include "/etc/varnish/vhost.exclude.vcl";
  
  # Set up vhost+url exceptions
  include "/etc/varnish/vhosturl.exclude.vcl";
  
  # Set up cPanel reseller exceptions
  include "/etc/varnish/reseller.exclude.vcl";
  
  # Restart rule for bfile recv
  include "/etc/varnish/bigfile.recv.vcl";
  
  
  if (req.request == "PURGE") {
          if (!client.ip ~ acl127_0_0_1) {error 405 "Not permitted";}
          return (lookup);
  }
  
  ## Default request checks
  if (req.request != "GET" &amp;&amp;
  req.request != "HEAD" &amp;&amp;
  req.request != "PUT" &amp;&amp;
  req.request != "POST" &amp;&amp;
  req.request != "TRACE" &amp;&amp;
  req.request != "OPTIONS" &amp;&amp;
  req.request != "DELETE") {
      return (pipe);
  }
  
  if (req.request != "GET" &amp;&amp; req.request != "HEAD") {
      return (pass);
  }
  
  ## Modified from default to allow caching if cookies are set, but not http auth
  if (req.http.Authorization) {
      return (pass);
  }
  
  include "/etc/varnish/versioning.static.vcl";
  
  ## Remove has_js and Google Analytics cookies.
  set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js)=[^;]*", "");
  
  set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
  
  
  
  if (req.http.Cookie ~ "^\s*$") {
      unset req.http.Cookie;
  }
  
  include "/etc/varnish/slashdot.recv.vcl";
  
  # Cache things with these extensions
  if (req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|pdf)$" &amp;&amp; ! (req.url ~ "\.(php)") ) {
      unset req.http.Cookie;
      return (lookup);
  }
  
  return (lookup);
  }
  
  sub vcl_fetch {
  
  set beresp.ttl = 40s;
  set beresp.http.Server = " - Web acceleration by http://www.unixy.net/varnish ";
  
  # Turn off Varnish gzip processing
  include "/etc/varnish/gzip.off.vcl";
  
  # Grace to allow varnish to serve content if backend is lagged
  set beresp.grace = 5m;
  
  # Restart rule bfile for fetch
  include "/etc/varnish/bigfile.fetch.vcl";
  
  # These status codes should always pass through and never cache.
  if (beresp.status == 503 || beresp.status == 500) {
      set beresp.http.X-Cacheable = "NO: beresp.status";
      set beresp.http.X-Cacheable-status = beresp.status;
      return (hit_for_pass);
  }
  
  if (beresp.status == 404) {
      set beresp.http.magicmarker = "1";
      set beresp.http.X-Cacheable = "YES";
      set beresp.ttl = 20s;
      return (deliver);
  }
  
  /* Remove Expires from backend, it's not long enough */    
  unset beresp.http.expires;
  
  if (req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|pdf|ico)$" &amp;&amp; ! (req.url ~ "\.(php)") ) {
      unset beresp.http.set-cookie;
      include "/etc/varnish/static.ttl.vcl";
  }
  include "/etc/varnish/slashdot.fetch.vcl"; 
  else {
      include "/etc/varnish/dynamic.ttl.vcl";
  }
  
  /* marker for vcl_deliver to reset Age: */
  set beresp.http.magicmarker = "1";
  
  # All tests passed, therefore item is cacheable
  set beresp.http.X-Cacheable = "YES";
  
  return (deliver);
  }
  
  sub vcl_deliver {
  
    # From http://varnish-cache.org/wiki/VCLExampleLongerCaching
    if (resp.http.magicmarker) {
       /* Remove the magic marker */
       unset resp.http.magicmarker;
  
       /* By definition we have a fresh object */
       set resp.http.age = "0";
     }
  
     #add cache hit data
     if (obj.hits &gt; 0) {
       #if hit add hit count
       set resp.http.X-Cache = "HIT";
       set resp.http.X-Cache-Hits = obj.hits;
     }
  else {
       set resp.http.X-Cache = "MISS";
     }
  
  }
  
  sub vcl_error {
  
  if (obj.status == 503 &amp;&amp; req.restarts &lt; 5) {
  set obj.http.X-Restarts = req.restarts;
  return (restart);
  }
  
  }
  
  # Added to let users force refresh
  sub vcl_hit {
  
  if (obj.ttl &lt; 1s) {
      return (pass);
  }
  
  if (req.http.Cache-Control ~ "no-cache") {
  # Ignore requests via proxy caches,  IE users and badly behaved crawlers
  # like msnbot that send no-cache with every request.
  if (! (req.http.Via || req.http.User-Agent ~ "bot|MSIE|HostTracker")) {
      set obj.ttl = 0s;
      return (restart);
  } 
  }
  
  return (deliver);
  
  }
  
  sub vcl_hash {
  
      hash_data(req.http.cookie);
  }
  </code></pre>
  
  <p>My headers ( on the second computer ):  </p>
  
  <pre><code>http://www.subtitleseeker.com/
  
  GET / HTTP/1.1
  Host: www.subtitleseeker.com
  User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Language: en-us,en;q=0.5
  Accept-Encoding: gzip, deflate
  Connection: keep-alive
  Referer: http://www.subtitleseeker.com/search/
  Cookie: __utma=107027200.157820436.1334670333.1334670333.1334670333.1; __utmb=107027200.51.10.1334670333; __utmz=107027200.1334670333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=107027200; __unam=4ca9c7b-136c095f22c-1396bc94-1
  
  HTTP/1.1 200 OK
  X-Powered-By: PHP/5.3.8
  Vary: User-Agent,Accept-Encoding
  Content-Encoding: gzip
  Content-Type: text/html
  Server: - Web acceleration by http://www.unixy.net/varnish
  X-Cacheable: YES
  Content-Length: 8169
  Accept-Ranges: bytes
  Date: Tue, 17 Apr 2012 14:10:12 GMT
  X-Varnish: 916645159
  Via: 1.1 varnish
  Connection: keep-alive
  Age: 0
  X-Cache: MISS
  </code></pre>
  
  <p>Can someone explain to me why this is happening and what I should change ?</p>
  
  <p>Thanks !</p>