gpt4 book ai didi

启用Cookie时,Varnish不会缓存

转载 作者:行者123 更新时间:2023-12-03 17:45:58 26 4
gpt4 key购买 nike

我使用 Varnish 3,网站在 wordpress 上。
问题是当我删除所有 cookie 和 set-cookie header 时, Varnish 缓存得很好。
但是我需要根据 cookie 制作 Varnish 来缓存页面。
(我的网站内容取决于地理位置,所以当用户第一次登录时,我添加了 cookie 'detected_country')
首先,我删除了所有 set-cookies header :

# Drop any cookies Wordpress tries to send back to the client.
sub vcl_fetch {
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
}
}

然后:
默认情况下,varnish 不会缓存具有 cookie 的请求。这是默认完成的 vcl_fetch 逻辑。所以我更改了默认的 vcl_fetch 并注释掉了 cookie 禁令(参见 /*|| req.http.Cookie*/ ):
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
}
if (req.http.Authorization /*|| req.http.Cookie*/) {
/* Not cacheable by default */
return (pass);
}
return (lookup);
}

在那之后,我预计 Varnish 会缓存带有 cookie 的页面,但事实并非如此:-(
但它应该缓存!不是吗?

如果我删除所有 cookie,它缓存正常:
sub vcl_recv {
if (!(req.url ~ "wp-(login|admin)")) {
remove req.http.Cookie;
}
}

请帮忙!我花了很多时间找出为什么它不缓存

最佳答案

除了您注释掉的部分以外,默认VCL中没有任何东西可以防止 Varnish 为其中包含cookie的请求缓存响应。但是,您的后端服务器仍然需要指示 header 中的 Varnish 来缓存给定的页面。在要让 Varnish 缓存的wordpress中渲染页面时,将此 header 添加到响应中:

Cache-Control: public, max-age=600

其中600表示将页面缓存10分钟,86400表示将缓存1天,依此类推。如果这样做,则必须非常小心,不要使用请求中存在的地理位置cookie来生成响应的任何部分否则,所有用户都将收到同一位置的内容,即任何发起了缓存请求的用户的位置。如果页面的任何部分都需要使用位置cookie,则需要使用esi:include标记来呈现它,该标记将向后端生成一个单独的请求,其结果可以告诉varnish不要缓存。

关于启用Cookie时,Varnish不会缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16791026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com