Как обойти кэш лака на основе конкретного заголовка
Я работаю над этим уже 2 дня назад, но безуспешно.
Итак, по сути, я хочу обойти лаковый кеш для определенного URL-адреса входящего запроса.
Я определил это правило:
sub vcl_recv {
if (req.url ~ "/en/reading-books/") { return(pass); }
}
Но когда я обновляю страницу, она все еще кэшируется, заголовки ответов возвращают следующее:
via: 1.1 varnish-v4
x-varnish: 2
и эта фоновая команда выдает вывод:
varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'
Что мне здесь не хватает? Любые указатели действительно ценятся.
1 ответ
Обновите до поддерживаемой версии
Прежде чем я расскажу об отладке кэширования этого входящего URL-адреса, я хочу отметить, что вы используете устаревшую версию Varnish, имеющую известные уязвимости безопасности .
Пожалуйста, либо обновитесь до последней версии, либо используйте Varnish Cache 6.0 LTS.
См. https://www.varnish-software.com/developers/tutorials/#installations для получения списка руководств по установке для различных дистрибутивов Linux.
Соответствие точному URL-адресу или шаблону URL-адреса
Код VCL, которым вы поделились, обходит кеш для/en/reading-books
. Вы пытаетесь найти точное соответствие этому URL-адресу или шаблону, соответствующему набору URL-адресов?
Для точного соответствия я бы изменил URL-адрес следующим образом:
sub vcl_recv {
if (req.url == "/en/reading-books/") {
return(pass);
}
}
Когда вы сопоставляете несколько URL-адресов, каждый из которых начинается с/en/reading-books/
, я бы настроил VCL следующим образом:
sub vcl_recv {
if (req.url == "^/en/reading-books/.*$") {
return(pass);
}
}
А как насчет заголовков ответов, специфичных для Varnish?
В своем вопросе вы упомянули следующие заголовки:
via: 1.1 varnish-v4
x-varnish: 2
Это указывает на то, что вы используете Varnish, а не на то, что Varnish обслуживает ответ из кеша.
The via
заголовок просто информирует пользователя о том, что Varnish является прокси-сервером в цепочке ответов.
Ценностьx-varnish
заголовок обычно относится к идентификатору транзакции, которая обработала ваш запрос.
На самом деле этоAge
заголовок, который указывает, как долго был получен ответ из кэша.
Проверка журналов
Команда имеет доступ к журналам общей памяти Varnish, но на самом деле не отображает много полезной информации о кэшировании.
Целью является возврат информации журнала доступа, аналогичной тому, что возвращают Apache и Nginx.
Пожалуйста, запустите следующую команду для отладки кэширования:
varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"
Покаvarnishncsa
выдает однострочный ответ в формате NCSA и возвращает полную транзакцию. Пожалуйста, добавьте вывод изvarnishlog
на ваш вопрос, и я помогу вам отладить.