Назад | Перейти на главную страницу

Varnish кэшировать только активы из одного сеанса

В настоящее время мне удается настроить лак для кеширования элементов от 1 пользователя, но когда вторые пользователи приходят в лаке, они получают еще один актив из Apache.

Как я могу кэшировать статические активы за magento (css, js, изображения pdf и т. Д.), Доступные для нескольких пользователей?

На vcl_recv я настроил:

   if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
        unset req.http.Https;
        unset req.http.Cookie;
        return (lookup);
    }

В vcl_fetch:

if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
if (beresp.http.Content-Type ~ "text/html" || beresp.http.Content-Type ~ "text/xml") 
{
    # do something
} else {
    unset beresp.http.expires;
    unset beresp.http.set-cookie;
    set beresp.ttl = 300h;
}

Я подозреваю, что это имеет какое-то отношение к vcl_hash, который хранит кеш с каким-то отпечатком пальца клиента.

Есть ли способ манипулировать хешем только для определенных типов активов?

РЕДАКТИРОВАТЬ 1: Полная конфигурация: http://pastebin.com/mzSVpEqN

Как отмечено в комментариях, закомментируйте vcl_hash функция (при условии, что она вам больше ни для чего не нужна) и, надеюсь, вы увидите улучшения.

HTH!

Varnish будет учитывать заголовки Vary из серверной части. Если серверная часть не отправляет Vary: User-Agent, нет причин для нормализации заголовка клиента User-Agent.

Я нашел способ решить эту проблему.

Varnish хранит разные кешированные страницы для каждого конкретного User-Agent. Я нашел следующий метод нормализации пользовательского агента ( https://www.varnish-cache.org/trac/wiki/VCLExampleNormalizeUserAgent )

Я просто складываю все в одну корзину и вижу огромное увеличение количества просмотров.

На vcl_recv:

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
     set req.http.user-agent = "Mozilla";
     unset req.http.Https;
     unset req.http.cookie;
     return (lookup);
}