Commit 75c7f15a authored by Poul-Henning Kamp's avatar Poul-Henning Kamp Committed by Dridi Boukelmoune

doc: Bring back changes to vcl-hashing.rst

On their own, those changes improve the documentation and don't mention
the reverted "hash_data() in vcl_recv" feature.

Refs e98e8e64
parent 5ea8940c
...@@ -6,12 +6,10 @@ ...@@ -6,12 +6,10 @@
Hashing Hashing
------- -------
Internally, when Varnish stores content in the cache it stores the object Internally, when Varnish stores content in the cache indexed by a hash
together with a hash key to find the object again. In the default setup key used to find the object again. In the default setup
this key is calculated based on the content of the *Host* header or the this key is calculated based on `URL`, the `Host:` header, or
IP address of the server and the URL. if there is none, the IP address of the server::
Behold the `default vcl`::
sub vcl_hash { sub vcl_hash {
hash_data(req.url); hash_data(req.url);
...@@ -23,7 +21,7 @@ Behold the `default vcl`:: ...@@ -23,7 +21,7 @@ Behold the `default vcl`::
return (lookup); return (lookup);
} }
As you can see it first checks in `req.url` then `req.http.host` if As you can see it first hashes `req.url` and then `req.http.host` if
it exists. It is worth pointing out that Varnish doesn't lowercase the it exists. It is worth pointing out that Varnish doesn't lowercase the
hostname or the URL before hashing it so in theory having "Varnish.org/" hostname or the URL before hashing it so in theory having "Varnish.org/"
and "varnish.org/" would result in different cache entries. Browsers and "varnish.org/" would result in different cache entries. Browsers
...@@ -47,7 +45,16 @@ And then add a `vcl_hash`:: ...@@ -47,7 +45,16 @@ And then add a `vcl_hash`::
hash_data(req.http.X-Country-Code); hash_data(req.http.X-Country-Code);
} }
As the default VCL will take care of adding the host and URL to the hash Because there is no `return(lookup)`, the builtin VCL will take care
we don't have to do anything else. Be careful calling ``return (lookup)`` of adding the URL, `Host:` or server IP# to the hash as usual.
as this will abort the execution of the default VCL and Varnish can end
up returning data based on more or less random inputs. If `vcl_hash` did return, ie::
sub vcl_hash {
hash_data(req.http.X-Country-Code);
return(lookup);
}
then *only* the country-code would matter, and Varnish would return
seemingly random objects, ignoring the URL, (but they would always
have the correct `X-Country-Code`).
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment