У меня проблема, с которой я не могу найти, откуда она взялась.Varnish игнорирует ttl
Я использую Ларный кэш на выделенном сервере с Nginx, и я перенаправляю сайты на их сервер.
Все работает как шарм, ожидаемый на вещи, все страницы кэшируются в течение 2 минут, даже если я определяю разные ttl для каждой страницы, определенный ttl игнорируется или обходит или что-то еще.
Вот моя конфигурация:
/и т.д./лак/vcl_backend_response:
#example.com:
if (beresp.http.host == "example.com" || beresp.http.host == "www.example.com") {
include "/etc/varnish/backend_response/example.conf";
}
return(deliver);
set beresp.http.Vary = "Accept-Encoding";
set beresp.ttl = 1h;
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
set beresp.ttl = 120 s;
set beresp.uncacheable = true;
return (deliver);
}
unset beresp.http.Server;
set beresp.http.Server = "Microsoft IIS/7.5";
if (beresp.http.content-type ~ "text") {
set beresp.do_gzip = true;
}
if (bereq.http.X-UA-Device) {
if (!beresp.http.Vary) { # no Vary at all
set beresp.http.Vary = "X-UA-Device";
} elseif (beresp.http.Vary !~ "X-UA-Device") { # add to existing Vary
set beresp.http.Vary = beresp.http.Vary + ", X-UA-Device";
}
}
set beresp.http.X-UA-Device = bereq.http.X-UA-Device;
set beresp.grace = 2h;
}
/etc/varnish/backend_response/example.conf
if (bereq.url ~ "(?i)\.(css|bmp|tif|ttf|docx|woff2|js|pict|tiff|eot|xlsx|jpg|csv|eps|woff|xls|jpeg|doc|ejs|otf|pptx|gif|pdf|swf|svg|ps|ico|pls|midi|svgz|class|png|ppt|mid|webp|jar)(\?[a-zA-Z0-9\=\.\-]+)?$") {
set beresp.ttl = 4h;
unset beresp.http.expires;
set beresp.http.cache-control = "max-age=345600";
set beresp.http.magicmarker = "1";
set beresp.grace = 300m;
set beresp.do_gzip = true;
} elseif(bereq.url == "/") {
set beresp.ttl = 1m;
set beresp.grace = 300m;
set beresp.do_gzip = true;
} else {
set beresp.ttl = 5m;
set beresp.grace = 300m;
set beresp.do_gzip = true;
}
страница кэшируется для ого и остальные страницы - 5 м, но по неизвестной причине все кэшируются на 2 м.
/etc/varnish/vcl_recv.conf:
sub vcl_recv {
#exmaple.com:
if (req.http.host == "exmaple.com" || req.http.host == "www.exmaple.com") {
set req.backend_hint = exmaple;
include "/etc/varnish/recv/exmaple.conf";
}
include "/etc/varnish/recv/global.conf";
unset req.http.cookie;
unset req.http.Accept-Encoding;
call identify_device;
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
if (req.http.Accept-Encoding) {
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
unset req.http.Accept-Encoding;
} elseif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
unset req.http.Accept-Encoding;
}
}
if (req.http.Cookie) {
set req.http.Cookie = regsuball(req.http.Cookie, "(^|(?<=;)) *__utm.=[^;]+;? *", "\1");
if (req.http.Cookie == "PHPSESSID|LOGIN") {
unset req.http.Cookie;
}
}
}
/etc/varnish/recv/exmaple.conf:
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set req.http.X-Forwarded-For = client.ip;
}
if (req.method != "GET" && req.method != "HEAD") {
return(pass);
}
if (req.url ~ "(?i)\.(css|bmp|tif|ttf|docx|woff2|js|pict|tiff|eot|xlsx|jpg|csv|eps|woff|xls|jpeg|doc|ejs|otf|pptx|gif|pdf|swf|svg|ps|ico|pls|midi|svgz|class|png|ppt|mid|webp|jar)(\?[a-zA-Z0-9\=\.\-]+)?$") {
unset req.http.cookie;
return (hash);
} elseif (req.url ~ "/custom-page") {
return (pass);
} elseif (req.url == "/") {
return (hash);
} else {
return (hash);
}
Любой ключ?
Заранее спасибо.
Пробовал удалить это условие полностью и до сих пор кэширование в течение 2 минут, какие-либо идеи? –