Кэширование содержимого лака / кальмара с помощью файлов cookie - PullRequest
0 голосов
/ 08 февраля 2012

Я абсолютный новичок в Varnish и кешировании в целом, так что этот вопрос для некоторых может быть тривиальным!

Я создаю веб-приложение (в рельсах), и я искал несколько вариантов кэширования контента на производственных серверах. До сих пор я смотрел на Varnish и немного обеспокоен отсутствием кэширования запросов с cookie. Я понимаю, почему такое поведение предназначено, но есть один вариант использования, который действительно может быть полезен, если бы был какой-то способ кешировать содержимое поверх файлов cookie.

В моем конкретном случае многие URL-адреса содержат данные, которые являются одинаковыми, независимо от того, вошел ли пользователь в систему. Например, tripadvisor, возможно, будет возвращать каждому зарегистрированному пользователю те же данные (по крайней мере, большинство данных) для списка отелей. Поэтому, по сути, хотя файлы cookie сопровождают запрос / ответ, около 90% страницы будет общим для каждого пользователя.

В таких сценариях возможно ли использовать Varnish для кэширования таких URL-адресов / страниц (может быть, только общая часть). И если да, то как.

Спасибо за тонну!

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Если я правильно понял ваш вариант использования.Вы хотели бы кэшировать подмножество страниц даже при наличии файлов cookie, поскольку эти страницы будут одинаковыми для всех пользователей.

Лучший способ сделать это - определить страницы, которые вы хотите кэшировать постоянноскажем /foo.html и /bar.html.Для этих страниц вы можете удалить заголовок запроса Cookie в VCL, чтобы Varnish мог кэшировать страницу.

В качестве примера вы можете использовать следующий код VCL:

sub vcl_fetch {
    [...]
    if(req.url ~ "/foo.html" || req.url ~ "/bar.html") {
        unset req.http.Cookie
    }

    [...]
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
}

Если у вас гораздо большеНа страницах вы можете использовать регулярное выражение в условии if для соответствия именам страниц.

Если вы хотите кэшировать только части страницы, вы можете использовать ESI , так как это поддерживается (поддержка ограничена, но достаточна) для Varnish, но для этого требуется переписать часть вашего приложения, и IMHO с использованием ESI действительно является PITA в долгосрочной перспективе (более сложное обслуживание).

0 голосов
/ 28 апреля 2016

Varnish vcl по умолчанию будет «передавать» запросы с файлами cookie, но использование vcl по умолчанию полезно только для проверки того, что ваш сервер Varnish запущен и работает.Почти никогда vcl по умолчанию не работает так, как нужно, без каких-либо изменений.

Вам не обязательно удалять cookie.Проще изменить способ обработки запросов с помощью файлов cookie из vcl_recv ().vcl_hash () по умолчанию не хэширует куки-файл.

Кроме того, vcl_fetch () больше не существует в Varnish 4.

...