Cache

如何動態設置清漆響應 TTL?

  • August 19, 2018

我的 php 腳本正在發送標頭X_Cache_ttl: 1h,並且在我的清漆配置文件中

sub vcl_fetch
{
   if(beresp.http.X-Cache-ttl){
           set beresp.ttl = beresp.http.X-Cache-ttl;
   }
}

但是當我嘗試啟動它時,帶有 set 命令的行導致清漆失敗。

在我得到的日誌中

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

如果重要的話,我在 centos 6 上使用 varnish 3.0.3。

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。

因此,請確保發出帶有 max-age 標頭的“Cache-Control”標頭。你可以看看 Varnish Software 的 Drupal 伺服器有哪些問題:

$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control
Cache-Control: public, max-age=600

https://github.com/varnishcache/varnish-cache/blob/master/doc/sphinx/users-guide/increasing-your-hitrate.rst

引用自:https://serverfault.com/questions/511678