Wie setze ich eine Lackantwort-TTL dynamisch?

7

Mein PHP-Skript sendet einen Header X_Cache_ttl: 1hund in meiner Lackkonfigurationsdatei habe ich

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

Aber die Zeile mit dem Befehl set führt dazu, dass der Lack fehlschlägt, wenn ich versuche, ihn zu starten.

im log bekomme ich

Expression has type STRING, expected DURATION
('input' Line 116 Pos 34) -- ('input' Line 116 Pos 56)
            set beresp.ttl = beresp.http.X-Cache-ttl;

Wie konvertiere ich X-Cache-ttlin eine Dauer, damit ich die TTL dynamisch einstellen kann?

Ich möchte mehrere if-Aussagen ähnlich wie vermeiden

if(beresp.http.X-Cache-ttl == "60s") {
    set beresp.ttl = 60s;
}

if(beresp.http.X-Cache-ttl == "1h") {
    set beresp.ttl = 1h;
}

Wenn es darauf ankommt, verwende ich Lack 3.0.3 für Centos 6.

DiverseAndRemote.com
quelle
Ich bin auf dieselbe Straßensperre gestoßen. Haben Sie eine Lösung für Lack 3.x oder sogar 2.1.5 gefunden? Im Moment habe ich 2.1.5 in der Produktion und 3.x in einer Inszenierung. Kann nicht zu Version 4.x wechseln, da die Syntax sehr unterschiedlich ist und es für unsere VCL etwas kompliziert ist, sofort auf eine neue Version zu wechseln.
Anup

Antworten:

9

Das vmod_stdModul verfügt über eine Funktion, die genau das tun soll, wonach Sie suchen.

import std; Am oberen Rand der VCL sollte dies funktionieren:

sub vcl_fetch
{
    set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h);
}

..wobei das 1hIhre Standardeinstellung ist, wenn der Header nicht gesetzt ist.

Shane Madden
quelle
1
Wenn Sie Varnish 4 ausführen, vcl 4.0;muss es oben in der VCL-Datei sein, und dannimport std;
Max Ivanov
1

Gemäß der Lackdokumentation können Sie den Cache-ControlHeader verwenden.

Cache-Kontrolle

Der Header 'Cache-Control' weist die Caches an, wie mit dem Inhalt umgegangen werden soll. Varnish kümmert sich um den Parameter max-age und berechnet daraus die TTL für ein Objekt.

Stellen Sie also sicher, dass Sie einen 'Cache-Control'-Header mit einem Max-Age-Header ausgeben. Sie können sich ansehen, welche Probleme der Drupal-Server von Varnish Software hat:

$ 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

wiktor
quelle