Konfigurieren von Varnish zum Umschreiben von Expires / Cache-Control-Headern für das clientseitige Caching

7

Wie konfiguriere ich Varnish so, dass alle Antworten auf übereinstimmende Anfragen "* .css" 30 Tage lang im Browser des Clients zwischengespeichert werden?

Ich versuche zu erreichen, dass Varnish die richtigen Einstellungen für "Expires:" und / oder "Cache-Control" festlegt, sodass alle CSS: s 30 Tage lang zwischengespeichert werden, unabhängig davon, was das Backend über die clientseitige Cachefähigkeit von sagt diese Objekte.

knorv
quelle

Antworten:

12

Das macht den Trick:

sub vcl_fetch {
  ..
  if (req.url ~ "\.css$") {
    set obj.http.magicmarker = "1";
  }
  ..
}

sub vcl_deliver {
  ..
  if (resp.http.magicmarker) {
    unset resp.http.magicmarker;
    set resp.http.Cache-Control = "...";
    set resp.http.Expires = "...";
    set resp.http.Age = "...";
  }
  ..
}
knorv
quelle
Ich musste set beresp.http.magicmarker = "1"unter Varnish 3 (Ubuntu Trusty)
Joril
0

Ich glaube nicht, dass Sie mit Varnish die VCL-Regeln auf "* .css" setzen können. Möglicherweise müssen Sie auf der Lack-Mailingliste nach genauen Informationen dazu fragen. Das Scoping nach MIME-Typ sollte möglich sein.

Angenommen, für Ihre Objekte sind bereits Cache-Header festgelegt, Sie möchten sie jedoch normalisieren. Eine modifizierte Version dieser VCL für die Lackdokumentation sollte Ihnen dabei helfen: http://varnish.projects.linpro.no/wiki/VCLExampleLongerCaching

Im Allgemeinen wurde Varnish nicht dafür entwickelt, größere Mengen an Headern oder Inhalten neu zu schreiben. Ihre Webserver oder Webanwendungen sollten dies besser als Varnish tun.

Jesper M.
quelle
0

Ich muss nur darauf hinweisen, dass Lack tatsächlich hervorragend zum Umschreiben von Headern geeignet ist. Das Testen auf eine beliebige URL ist in vcl_recv möglich, und in vcl_fetch ist dies eine häufige Anwendung für Lacke. In recv analysieren Sie eine eingehende Anfrage. Beim Abrufen analysieren Sie die Backend-Antwort.

Im Allgemeinen bearbeiten Sie die Anforderung in recv und leiten sie an ein Backend weiter. Sie bearbeiten die Antwort in fetch und schreiben die Header entsprechend um, bevor Sie das Objekt möglicherweise im Cache speichern und die Antwort übermitteln.

In holen können Sie tun

unset beresp.http.expires;
unset beresp.http.cache-control;

ebenso gut wie

set beresp.http.Cache-Control = "max-age = 2678406";

und so weiter.

Stefan Caunter
quelle