2017-01-12 2 views
1

Quelqu'un peut-il expliquer sur le code vcl suivant.Que fait hash_data vcl_hash?

sub vcl_hash { 
    hash_data(req.url); 

    if (req.http.host) { 
     hash_data(req.http.host); 
    } else { 
     hash_data(server.ip); 
    } 

    if (req.http.Cookie) { 
     hash_data(req.http.Cookie); 
    } 
} 

Je ne comprends le hachage de mon req.url en utilisant la fonction hash_data comme la clé du cache. Le prochain code if else est vague pour moi.

Aidez-nous s'il vous plaît. Thnx.

Répondre

2

La méthode hash_data est utilisée pour configurer le hachage, en d'autres termes la clé, de l'objet mis en cache. Cette clé est utilisée pour comparer l'objet avec les objets déjà en cache.

Dans le code que vous publiez, la première chose à considérer pour le hachage est l'URL de la page demandée: req.url.

Mais notez que si Varnish utilisé uniquement l'URL de hachage d'un objet, il serait trop vague et pourrait conduire à la même cache étant livré à différents sites comme www.example.com/test_url et www.example2. com/test_url.

Pour éviter ce problème, il ajoutera l'hôte (req.http.host) au hachage si elle existe, sinon il va ajouter l'IP (server.ip) au lieu, par exemple, http://192.168.0.1/test_url. Enfin, il va vérifier l'existence de cookies et les ajouter au hachage si elles le font. Ceci est fait lorsque les pages montrent un contenu différent basé sur des cookies.

+0

Dans le 3ème paragraphe de votre commentaire. Est-il possible d'utiliser un seul vernis sur un site différent? –

+1

Sure vernis est un proxy inverse, il reçoit les demandes et les envoyer à différents serveurs/sites. –

+1

@JohnRoca, comme l'a déclaré Benjamin, c'est possible et la configuration de la question est déjà prête pour différents sites. – alejdg