Magento не попадает в лаковый кеш

Я установил установку Magento с Nginx за кеш-сервером Varnish, и я использую это расширение.

Тем не менее, я никогда не получаю удар по кешу

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

Я понимаю, что причина в том, что куки устанавливаются, поэтому Varnish передает запрос в Nginx, но я не могу найти причину, по которой он не удаляет их из запроса (это должно быть сделано в соответствии с default.vcl, который я ' м, используя тот, который предоставляется модулем)

2 ответа

Magento возвращает ответ, указывающий, что не следует кэшировать. Так что лак не кеширует его:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, s-maxage=0

Вам нужно вернуть заголовки публичного кэша (с положительной директивой max-age, если хотите)

Cache-Control: public, max-age=600

и / или заголовок Expires с датой в будущем.

Кроме того, наличие заголовков Set-Cookie в ответе, если вы используете default.vcl, также приведет к тому, что элемент не будет кэширован:

# 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);

Вам просто нужно удалить только куки, и все готово в вашем файле.vcl

sub vcl_recv {
    unset req.http.cookie;
}

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

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

ИЛИ ЖЕ

Если вам нужно использовать расширение, следуйте полному решению, опубликованному здесь.

Другие вопросы по тегам