Я обнаружил, что могу установить TTL в Varnish следующим образом в моем файле VCL:
sub vcl_fetch {
# 1 minute
set obj.ttl = 1m;
}
Но какова настройка по умолчанию (при условии, что внутренний сервер не устанавливает заголовок управления кешем)?
TTL по умолчанию можно передать через команду varnishd через -t
переключатель командной строки и, вероятно, получен из файла свойств в вашей файловой системе. В системе CentOS, которую я смотрю, она установлена с помощью DEFAULT_TTL
из /etc/sysconfig/varnish
.
Вы можете увидеть живую настройку, используя varnishadm, например,
varnishadm param.show default_ttl
Фактически, следующая логика VCL по умолчанию относится к некэшируемым объектам.
sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
/*
* Mark as "Hit-For-Pass" for the next 2 minutes
*/
set beresp.ttl = 120 s;
return (hit_for_pass);
}
return (deliver);
}
означает «если объект не кэшируется - передавать клиентские запросы для этого объекта в бэкенд напрямую и одновременно в течение 2 минут, не ставить их в очередь»
Узнать больше на https://stackoverflow.com/questions/12691489/varnish-hit-for-pass-means
Это в шаблоне по умолчанию:
sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
/*
* Mark as "Hit-For-Pass" for the next 2 minutes
*/
set beresp.ttl = 120 s;
return (hit_for_pass);
}
return (deliver);
}
Итак, 120 секунд.