私の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;
TTLを動的に設定できるように、X-Cache-ttl
を期間に変換するにはどうすればよいですか?
次のような複数のifステートメントを避けたい
if(beresp.http.X-Cache-ttl == "60s") {
set beresp.ttl = 60s;
}
if(beresp.http.X-Cache-ttl == "1h") {
set beresp.ttl = 1h;
}
重要な場合は、centos6でニス3.0.3を使用しています。
vmod_std
モジュールには、探していることを実行する必要がある関数があります。
VCLの上部にあるimport std;
の場合、これは機能するはずです。
sub vcl_fetch
{
set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h);
}
..ヘッダーが設定されていない場合、1h
がデフォルトです。
ワニスのドキュメントによると、Cache-Control
ヘッダーを使用できます。
Cache-Control
'Cache-Control'ヘッダーは、コンテンツの処理方法をキャッシュに指示します。ワニスはmax-ageパラメーターを考慮し、それを使用してオブジェクトのTTLを計算します。
したがって、max-ageヘッダーとともに「Cache-Control」ヘッダーを発行するようにしてください。 VarnishSoftwareのDrupalサーバーの問題:
$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control
Cache-Control: public, max-age=600