Varnish缓存与购物车

3
我最近在研究Varnish并进行了大量的谷歌搜索。我们最近在运行电子商务站点的服务器上设置了Varnish以应对圣诞节的到来,未来几周我们将会有更多的回头客,因此使用Varnish是一个不错的选择。
我想知道一个问题,当使用Varnish时,如果用户第一次到达,它会检测到一个新的cookie(因为购物车使用了会话),并缓存他们访问的页面。
但是,如果我们想要缓存更多顾客的重复访问,我在一个单独的stackoverflow线程上看到,通过编辑.vcl并添加以下内容可以帮助它缓存页面,即使使用session_start:
     sub vcl_recv {
     unset req.http.Cookie;
     return (lookup);
     }

     sub vcl_fetch {
     unset beresp.http.Set-Cookie;
     set beresp.ttl = 24h;
     return(deliver);
     }

我的问题是,我有点困惑于缓存的具体内容。这个缓存是否会包括某人的购物车,并将其提供给所有访问该产品页面的访客?
如果我对Varnish的基本要点遗漏了什么,请谅解;最坏的情况下,它可以帮助减轻返回访问的负载,但缓存更多的网站内容会更好!
非常感谢您的帮助!
1个回答

2
默认情况下,Varnish不会缓存带有设置Cookie的页面。Cookie会向HTTP引入状态,因此Varnish无法知道页面是否已更改。
然而,您上面的代码片段并不能解决您的问题。它只会完全删除Cookie头。(即,您的PHP后端将不会接收到会话Cookie。)
根据您的网站实际情况,您可以选择以下操作之一:
- 保持行为不变:如果您的页面上有某个地方显示已登录用户的用户名,则不希望该内容被缓存。在这种情况下,Varnish仅会为访客(即没有会话的用户)缓存内容。 - 如果您的每个页面上都没有这样的用户相关框,则可以缓存除用户相关(例如购物车)页面以外的所有内容。

太好了,谢谢NikiC;目前我们在每个页面上都有会话相关的功能,所以我想我们需要对网站的工作原理进行一些调整!再次感谢。 - flukeflume
1
作为这个答案的补充,我想说如果你想要更详细的缓存处理,不是基于页面而是基于最终用户页面的部分,那么你应该看看Varnish ESI的能力。 - regilero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接