Как проверить, правильно ли работает кэш Varnish?

Я использую кэш лака на веб-сайте Wordpress, который работает на Nginx. Он настроен так, как указано в этот блог. Он работает, но я не уверен, что он действительно обслуживает контент из кэша.

Как узнать наверняка? Кто-нибудь, пожалуйста, проводите меня. Я новичок в лакировании кэша.

2 ответов


Varnish по умолчанию добавит заголовки в ответ на любой запрос, который он обрабатывает. Вы можете посмотреть на заголовки reponse, используя инструменты браузера, такие как Firebug, или инструменты CLI, такие как curl или GET. Вот пример GET:

sudo apt-get install libwww-perl && GET -Used http://localhost:6081/index.html

два заголовках искать X-Лак и возраст. X-Лак будет содержать один или два номера в нем, сами номера не важны, но они относятся к запросам. Если запрос приводит к пропуску, Varnish извлекает страницу из бэкэнда, а заголовок X-Varnish в ответе содержит один номер для текущего запроса:

X-Varnish: 107856168

при следующем запросе той же страницы это может привести к попаданию. Если это так, Varnish извлекает страницу из кэша, а также добавляет номер из исходного запроса:

X-Varnish: 107856170 107856168

на возраст заголовок говорит, сколько секунд назад кэшированная копия. С Мисс он будет 0, и с хитом это > 0.

обратите внимание, что бэкэнд может установить заголовок age, который делает его похожим на ложное попадание, а уложенные лаки могут создавать ложные промахи в заголовке X-Varnish. Чтобы быть абсолютно уверенным при отладке, вы можете добавить свой собственный заголовок в функции hit и miss VCL. См. эту страницу для описания https://www.varnish-software.com/static/book/VCL_functions.html. Как Новичок лакировать X-лак и возраст заголовка, скорее всего, все, что вам нужно.


было бы неплохо добавить свои собственные X-заголовки в разных точках вашего vcl, чтобы вы могли выполнять модульное тестирование по различным путям кода и условиям вашего vcl.

например, в vcl_deliver:

sub vcl_deliver
{
    # Insert Diagnostic header to show Hit or Miss
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    }
    else {
        set resp.http.X-Cache = "MISS";
    }

    ...
}