мой php скрипт отправляет заголовок X_Cache_ttl: 1h
и в моем файле конфигурации лака у меня есть
sub vcl_fetch
{
if(beresp.http.X-Cache-ttl){
set beresp.ttl = beresp.http.X-Cache-ttl;
}
}
но строка с командой set вызывает сбой varnish, когда я пытаюсь запустить его.
в журнале я получаю
Expression has type STRING, expected DURATION
('input' Line 116 Pos 34) -- ('input' Line 116 Pos 56)
set beresp.ttl = beresp.http.X-Cache-ttl;
Как мне конвертировать X-Cache-ttl
до продолжительности, чтобы я мог динамически устанавливать TTL?
Я бы хотел избежать нескольких операторов if, похожих на
if(beresp.http.X-Cache-ttl == "60s") {
set beresp.ttl = 60s;
}
if(beresp.http.X-Cache-ttl == "1h") {
set beresp.ttl = 1h;
}
Если это важно, я использую лак 3.0.3 на centos 6.
В vmod_std
В модуле есть функция, которая должна делать то, что вы ищете.
import std;
в верхней части VCL, тогда это должно работать:
sub vcl_fetch
{
set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h);
}
..где 1h
используется по умолчанию, если заголовок не установлен.
Согласно документации Varnish вы можете использовать Cache-Control
заголовок.
Кэш-контроль
Заголовок «Cache-Control» указывает кешам, как обрабатывать контент. Varnish заботится о параметре max-age и использует его для вычисления TTL для объекта.
Поэтому убедитесь, что вы используете заголовок Cache-Control с заголовком max-age. Вы можете посмотреть, с чем работает сервер Drupal Varnish Software:
$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control
Cache-Control: public, max-age=600