varnish 4.0 官方文檔翻譯17-Hashing

Hashing

實質上,當Varnish存儲內容在緩存中時,它也把如何發現這個對象的哈希鍵和對象一塊兒存儲。默認設置的hash鍵是基於內容的的主機名或者ip地址和URL計算出的。(url+host或者url+ip)git

默認的VCL:github

sub vcl_hash {
    hash_data(req.url);
    if (req.http.host) {
        hash_data(req.http.host);
    } else {
        hash_data(server.ip);
    }
    return (lookup);
}

正如你看見那樣,首先檢查req.url而後若是req.http.host存在的話檢查req.http.host算法

須要指出的是在哈希以前varnish不會將hostname或者URL轉換成小寫,所以「Varnish.org/」和「varnish.org/」理論會致使不一樣的緩存條目。然而,瀏覽器,每每小寫主機名。瀏覽器

你能夠修改hash。這種方式你能夠讓Varnish根據任意算法提供不一樣的內容給不一樣的客戶端。緩存

你若是想基於源ip地址提供不一樣語言的頁面給你的用戶。你須要一些根據ip地址判斷是哪一個國家的VMOD,而後放在哈希中。看起來像這樣:url

In vcl_recv:spa

set req.http.X-Country-Code = geoip.lookup(client.ip);

而後在vcl_hash中增長:code

sub vcl_hash {
    hash_data(req.http.X-Country-Code);
}

默認的VCL將增長host和url到hash,儘管咱們沒有作任何事情。小心調用return(lookup),這將停止默認VCL的執行,同時varnish能夠在結束時基於隨機輸入的或多或少的數據。server

相關文章
相關標籤/搜索