我想将Cookie传递给后端,但我不希望将它们添加到哈希表中。我的目标是仅根据主机提供每个请求。有可能吗?
答案 0 :(得分:2)
默认情况下,如果未设置主机头,则基于url和host或ip的varnish缓存 - 请参阅内置vcl_hash:
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (lookup);
}
如果你没有在vcl_recv函数中取消设置cookie,那么默认情况下,varnish不会缓存响应,因为它将“返回(传递);”在内置的vcl_recv函数中。
sub vcl_recv {
...
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
return (hash);
}
如果您不想缓存,那么这样就可以了。
如果你想缓存并需要将cookie发送到后端,那么我猜你必须“返回(哈希);”在您的“vcl_recv”版本中,但只有在响应总是相同的情况下才会有意义,无论发送的cookie如何。
作为旁注:如果您确实要缓存响应,那么您还需要取消设置后端设置的Cookie或避免进入内置的“vcl_backend_response”
答案 1 :(得分:0)
为了将cookie传递给后端并缓存请求,我这样做了:
从vcl_recv中删除它:
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
将此添加到vcl_fetch:
unset beresp.http.set-cookie;