#varnish #varnish-vcl
#varnish #varnish-vcl
Вопрос:
Вот как выглядит мой varnish.vcl.
vcl 4.0;
import directors;
import std;
backend client {
.host = "service1";
.port = "80";
}
sub vcl_recv {
std.log("varnish log info:" req.http.host);
# caching pages in client
set req.backend_hint = client;
# If request is from conent or for pages remove headers and cache
if ((req.url ~ "/content/") || (req.url ~ "/cms/api/") || req.url ~ ".(png|gif|jpg|jpeg|json|ico)$" || (req.url ~ "/_nuxt/") ) {
unset req.http.Cookie;
std.log("Cachable request");
}
# If request is not from above do not cache and pass to Backend.
else
{
std.log("Non cachable request");
return (pass);
}
}
sub vcl_backend_response {
if ((bereq.url ~ "/content/") || (bereq.url ~ "/cms/api/") || bereq.url ~ ".(png|gif|jpg|jpeg|json|ico)$" || (bereq.url ~ "/_nuxt/") )
{
unset beresp.http.set-cookie;
set beresp.http.cache-control = "public, max-age=259200";
set beresp.ttl = 12h;
return (deliver);
}
}
# Add some debug info headers when delivering the content:
# X-Cache: if content was served from Varnish or not
# X-Cache-Hits: Number of times the cached page was served
sub vcl_deliver {
# Was a HIT or a MISS?
if ( obj.hits > 0 )
{
set resp.http.X-Cache-Varnish = "HIT";
}
else
{
set resp.http.X-Cache-Varnish = "MISS";
}
# And add the number of hits in the header:
set resp.http.X-Cache-Hits = obj.hits;
}
Если я захожу на страницу из того же браузера, отображается вкладка netwrok
X-Cache-Varnish = «ПОПАДАНИЕ»;
X-Cache-Хиты = ;
Допустим, если я загружаю Chrome 10 раз, это то, что я получаю
X-Cache-Varnish = «ПОПАДАНИЕ»;
X-Cache-Hits = 9;
9, потому что сначала был промах, а остальные 9 были отправлены из кэша.
Если я попробую окно инкогнито или другой браузер, он получит свой собственный счетчик, начиная с 0. Я думаю, что каким-то образом я все еще кэширую файлы cookie. Я не смог определить, чего мне не хватает.
В идеале я хочу удалить все файлы cookie для определенных путей. но почему unset
-то, похоже, у меня это не работает.
Ответ №1:
Если вы действительно хотите убедиться, что эти запросы кэшируются, убедитесь, что вы выполнили a return(hash);
в своем if-заявлении.
Если вы не вернетесь, встроенный VCL вступит во владение и продолжит выполнять свое стандартное поведение.
Кроме того, неясно, устанавливает ли ваш серверный Vary
сервер заголовок, который может повлиять на вашу частоту посещений.
Вместо того, чтобы гадать, я предлагаю использовать журналы, чтобы выяснить это.
Выполните следующую команду для отслеживания ваших запросов:
varnishlog -g request -q "ReqUrl ~ '^/content/'"
Выражение запроса VSL этого оператора предполагает, что URL начинается с
/content
. Пожалуйста, настройте соответствующим образом.
Пожалуйста, пришлите мне выдержку varnishlog
для 1 конкретного URL-адреса, а также для обеих ситуаций:
- Тот, который попадает в кеш на обычной вкладке браузера
- Тот, который приводит к пропуску кэша в режиме инкогнито или из другого браузера
Журналы предоставят больше контекста и объяснят, что произошло.