web-dev-qa-db-ja.com

ワニス応答TTLを動的に設定するにはどうすればよいですか?

私の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がデフォルトです。

9
Shane Madden

ワニスのドキュメントによると、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

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

1
wiktor