2016-01-22 88 views
1

我試圖使清漆工作與最後修改的標題,但無論我做什麼我的頁面在120s緩存,並且清漆永遠不會與後端重新驗證。光油4不尊重緩存控制:必須重新驗證

我的後端在發送這些標題:

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

當我登錄命中對象的TTL,它的價值總是被設置爲120秒。

我使用默認VCL配置光油4.

祺,


編輯:一些搜索後,我發現,120秒是光油的缺省TTL值。但爲什麼他忽視最後修改?

回答

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; 
    } 
} 

它僅適用於光油4

我引用了1秒的TTL的理由:

這樣,你只1秒緩存(不設置爲0,或所有 請求這個對象將順序完成),但將保持 對象一個星期,重新驗證它每次請求和 其ttl已過期。

+0

這是一個想法: 當'grace'設置爲0並且'keep'爲1周時,每個請求都會觸發後端,並且必須等待來自後端的響應。除此之外,如果後端服務器關閉,則不會傳送任何內容。 如果您將grace設置爲1w而不是在寬限期內,則會立即回覆請求,並且Varnish將從後端檢索最新的信息以用於下一個請求。另外,如果後端服務器關閉,緩存的值仍然傳遞。 – Ronald

+0

原始響應似乎表明*每個*請求都必須重新生效(「proxy-revalidate」和「stale-while-revalidate = 0」),因此不允許發送緩存版本。 –

相關問題