2016-01-22 3 views
1

Я пытаюсь сделать работу с лаком с последними измененными заголовками, но независимо от того, что я делаю, моя страница кэшируется в течение 120 секунд, а Varnish никогда не повторяется с бэкэнд.Varnish 4 не соблюдает Cache-Control: must-revalidate

Мой бэкенд посылает эти заголовки:

Cache-Control: must-revalidate, proxy-revalidate, public, stale-while-revalidate=0 
Last-Modified: Fri, 22 Jan 2016 03:32:33 GMT 

И когда я вхожу в TTL объекта на удар, это значение всегда устанавливается в 120s.

Я использую по умолчанию VCL конфигурации лаковой 4.

С уважением,


Edit: После некоторого поиска я обнаружил, что 120s является значение ТТЛ по умолчанию Лака. Но почему он игнорирует последнее изменение?

ответ

1

я получил ответ из списка рассылки лаковой, чтобы эмулировать «должен перепроверить» заголовок, необходимо добавить этот кусок VCL:

sub vcl_backend_response { 
    if (beresp.http.cache-control ~ "must-revalidate") { 
     set beresp.ttl = 1s; 
     set beresp.grace = 0s; 
     set beresp.keep = 1w; 
    } 
} 

Он работает только на Varnish 4.

цитирую причину 1s ТТЛ:

Таким образом, вы бы только кэш в течение 1 секунды (не установить его на 0, или все запросы будут выполняться последовательно), но будет сохранять объект в течение недели, проверять его каждый раз, когда он запрашивается, и истекает срок его действия ttl.

+0

Одумалась: С «грацией», установленной в 0 и «сохранить» до 1 недели, каждый запрос попадет в бэкэнд и должен ждать ответа от бэкэнда. В дополнение к этому, если сервер backend не работает, ничего не доставляется. Если вместо этого вы устанавливаете изгиб в 1 раз, а во время изящества время ответа сразу получает ответ, а лак будет извлекать самую последнюю информацию из бэкэнд для следующего запроса. Плюс, если сервер бэкэнд работает, кешированное значение все равно будет доставлено. – Ronald

+0

Ответ на происхождение, по-видимому, указывает на то, что * каждый * запрос должен быть пересмотрен («прокси-revalidate» и «stale-while-revalidate = 0»), поэтому отправка кешированной версии не разрешена. –

0

Установите "S-MaxAge" или "MaxAge" атрибуты заголовка Cache-Control:

beresp.ttl инициализируется с первым значением он находит среди:

The s-maxage variable in the Cache-Control response header field 
The max-age variable in the Cache-Control response header field 
The Expires response header field 
The default_ttl parameter. 

См: http://book.varnish-software.com/4.0/chapters/VCL_Built_in_Subroutines.html#the-initial-value-of-beresp-ttl