首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento未命中Varnish缓存

Magento未命中Varnish缓存
EN

Stack Overflow用户
提问于 2013-06-13 00:03:44
回答 2查看 5.8K关注 0票数 0

我在Varnish缓存服务器后面用Nginx安装了Magento,并且我使用的是this extension

然而,我从来没有在缓存上得到一个命中:

代码语言:javascript
复制
HTTP/1.1 200 OK
Server: nginx/1.1.19
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.10-1ubuntu3.6
Set-Cookie: frontend=8hoas96a6grd1hfb8vqqa5t9a5; expires=Wed, 12-Jun-2013 16:51:51 GMT; path=/; domain=54.232.214.253; H
ttpOnly
Set-Cookie: currency=BRL; expires=Wed, 12-Jun-2013 16:51:51 GMT; path=/; domain=54.232.214.253; httponly
Set-Cookie: PAGECACHE_ENV=xo32rWZFNbsRL%2F05449a0JLaKEguYZObIG0ZFWOVEV3Ajma1%2FUaj%2FA8nPjnTGpBu%2BMw9h72MUATmZTpHe7Ec4A
9pN%2BJcu%2F%2BggyaAX%2FZEZC4%3D; expires=Wed, 12-Jun-2013 16:51:52 GMT; path=/; domain=54.232.214.253; httponly
X-Cache-Debug: 1
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, s-maxage=0
Expires: Mon, 31 Mar 2008 10:00:00 GMT
Pragma: no-cache
X-Purge-URL: /
X-Purge-Host: 54.232.214.253
Date: Wed, 12 Jun 2013 15:51:52 GMT
X-Varnish: 369200976
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS
X-Cache-Expires: Mon, 31 Mar 2008 10:00:00 GMT

我理解原因是因为设置了cookie,所以Varnish将请求传递给Nginx,但我找不到它没有从请求中删除它们的原因(这应该根据我使用的default.vcl完成,该cookie是由模块提供的)

EN

回答 2

Stack Overflow用户

发布于 2013-07-18 09:20:42

Magento正在返回一个响应,表明它不应该被缓存。所以varnish不会缓存它:

代码语言:javascript
复制
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, s-maxage=0

您需要返回公共缓存头(如果您愿意,可以使用正的max-age指令)

代码语言:javascript
复制
Cache-Control: public, max-age=600

和/或具有将来日期的Expires报头。

此外,如果您使用的是default.vcl,在响应中出现Set-Cookie标头也会导致项目不被缓存:

代码语言:javascript
复制
# sub vcl_fetch {
#     if (beresp.ttl <= 0s ||
#         beresp.http.Set-Cookie ||  /* Look at this line */
#         beresp.http.Vary == "*") {
#       /*
#        * Mark as "Hit-For-Pass" for the next 2 minutes
#        */
#       set beresp.ttl = 120 s;
#       return (hit_for_pass);
票数 0
EN

Stack Overflow用户

发布于 2014-06-04 20:11:31

您只需取消设置cookies,即可在.vcl文件中完成

代码语言:javascript
复制
sub vcl_recv {
    unset req.http.cookie;
}

sub vcl_fetch {
    unset beresp.http.set-cookie;
}

sub vcl_deliver {
 unset resp.http.set-cookie;
}

如果你需要使用扩展,那就使用follow complete solution posted here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17070201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档