Удалить все cookie, кроме нужных в конфигурации Varnish

При кешировании в varnish возникает вопрос, какие данные использовать для генерации хеш-функции кеша. Типично используют req.url и reg.http.Cookie. Но включение куки приводит к тому, что страницы не попадают в кеш Varnish.

Типовая генерация хеша в varnish 4:

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

Многие из них начинаются с символа подчеркивания, потому не сложно почистить их в секции vcl_recv:

Но, к сожалению, не все куки, делающие на практике кеширование страниц в varnish бесполезным, следуют этому правилу. Попытки очистить известные куки правилами вроде:

рано или поздно приводят к пониманию, что сложно предсказать какие ещё куки захочет создавать facebook или google.

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

Для этого следует обладать полной «картой» переменных cookie вашего веб-приложения (сайта), понимать как они могут влиять на HTML код.

Вариант 1 — Маркировка и замена

Довольно изящный вариант, вполне рабочий, найденный мной в сети. Скорее всего написан из-за не очень глубоких знаний регулярных выражений.

Арсенал функций varnish 4 очень скромный. Потому идея была интересная, и я знакомлю вас с ней.

Вариант 2 — сложная замена

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

«Lookbehind» конструкция (?<=\s|^) позволяет нам проверить, что перед искомым выражением идет пробел или начало строки. А условные выражения (?! … ) позволяют отфильтровать переменные по «белому» списку.

Написать комментарий

Мало букафф? Читайте есчо !

Ошибка конфига varnish VCL “Symbol not found: std....”

Май 24, 2018 г.

После std идет название какой либо функции стандартной библиотеки VCL. Скорее всего проблема в том, что вы не подключили std в вашей конфигурации (часто встречается при миграции конфигов). Для подключения библиотек в Си используется директива import. ...

Читать

Как исправить ошибку upstream sent too big header while reading response header from upstream?

Январь 18, 2021 г.

Если текст подобной ошибки вы обнаружите в логах ngnix, то см. как её исправить в данной статье. Ошибка связана с недостаточным размером буфера для передачи заголовка запроса. Во-первых, надо разобраться что является в данном случае upstream-ом, ...

Читать

 

Комментарии к «Удалить все cookie, кроме нужных в конфигурации Varnish»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: