Как проверить, правильно ли работает кэш 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";
}
...
}