Я хочу, чтобы мои лаковые серверы кешировали все файлы. На бэкэнде есть lighttpd, на котором размещаются только статические файлы, и есть мкр5 в URL-адресе в случае изменения файла, например. /gfx/Bird.b6e0bc2d6cbb7dfe1a52bc45dd2b05c4.swf
). Однако мой рейтинг попаданий очень плох (около 0,18).
Моя конфигурация:
sub vcl_recv {
set req.backend=default;
### passing health to backend
if (req.url ~ "^/health.html$") {
return (pass);
}
remove req.http.If-None-Match;
remove req.http.cookie;
remove req.http.authenticate;
if (req.request == "GET") {
return (lookup);
}
}
sub vcl_fetch {
### do not cache wrong codes
if (beresp.status == 404 || beresp.status >= 500) {
set beresp.ttl = 0s;
}
remove beresp.http.Etag;
remove beresp.http.Last-Modified;
}
sub vcl_deliver {
set resp.http.expires = "Thu, 31 Dec 2037 23:55:55 GMT";
}
Я сделал настройку производительности:
DAEMON_OPTS="${DAEMON_OPTS} -p thread_pool_min=200 -p thread_pool_max=4000 -p thread_pool_add_delay=2 -p session_linger=100"
Для уверенности требуется дополнительная информация (светлые заголовки ответов), но я предполагаю, что ваш бэкэнд не устанавливает заголовок Expires или Cache-control.
Это необходимо, чтобы Varnish знал, как долго хранить данные в кеше, или вы также можете указать ttl по умолчанию в DAEMON_OPTS через -t default_ttl_in_seconds
.
Или действительно внутри самого VCL, как здесь ответили: Varnish Cache - TTL по умолчанию?
ТЕМ НЕ МЕНИЕ: это снова предполагает, что ваш backend light server не возвращает истечение срока в прошлом и не возвращает заголовок Cache-control, который предотвращает кеширование (т.е. no-cache, must-revalidate iirc), если это так, установка ttl по умолчанию будет ничего не делать, чтобы облегчить проблему.