Как обойти кэш лака на основе конкретного заголовка

Я работаю над этим уже 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на ваш вопрос, и я помогу вам отладить.

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