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

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

Я работаю над этим уже два дня, но безуспешно.

Итак, по сути, я хочу обойти кэш Varnish для определенного 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 обслуживает ответ из кэша.

Заголовок viaпросто информирует пользователя о том, что Varnish является прокси-сервером в цепочке ответов.

Значение заголовка x-varnishобычно относится к идентификатору транзакции, обработавшей ваш запрос.

На самом деле это Ageзаголовок, который указывает, как долго ответ был обработан из кэша.

Проверка журналов

Команда varnishncsaимеет доступ к журналам общей памяти Varnish, но на самом деле не отображает много полезной информации о кэшировании.

Целью varnishncsaявляется возврат информации журнала доступа, аналогичной той, которую возвращают Apache и Nginx.

Для отладки кэширования выполните следующую команду:

varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"

В то время как varnishncsaпроизводит однострочный ответ в формате NCSA, varnishlogвернет полную транзакцию. Пожалуйста, добавьте вывод из varnishlogк вашему вопросу, и я помогу вам отладить.

Связанный контент