Hash to Hash

Everyone had to deal at least once with Varnish, knows this: cookies handling may be your nemesis. But I've just found a useful trick, to publish here as future reference.

sub vcl_hash {  
    # Common hashing stuffs
    set req.http.hash = req.url;
    if (req.http.host) {
        set req.http.hash = req.http.hash + "#" + req.http.host;
    } else {
        set req.http.hash = req.http.hash + "#" + server.ip;
    }

    # Stuffing the hash!
    if (req.http.Cookie ~ "set_or_not_set_cookie_name") {
         hash_data("set_or_not_set_cookie_name");
    }
}

This is reccomended when dealing with cookies which mere existance is determinant for some server-side behaviour. In this way you will have two hits on the cache: the page expected when the cookie is set, and the page expected when the cookie is not set.