web-dev-qa-db-ja.com

クライアント側のキャッシュ用にExpires / Cache-Controlヘッダーを書き換えるようにVarnishを構成する

Varnishを構成して、 "*。css"に一致する要求へのすべての応答がクライアントのブラウザーに30日間キャッシュされるようにするにはどうすればよいですか?

私が達成しようとしているのは、Varnishに正しい「Expires:」や「Cache-Control」設定を設定させて、バックエンドがクライアント側のキャッシュ可能性について何を言っているかに関係なく、すべてのCSS:が30日間キャッシュされるようにすることです。これらのオブジェクト。

7
knorv

これはトリックを行います:

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 = "...";
  }
  ..
}
12
knorv

ワニスは実際にはヘッダーの書き換えに優れていることを指摘するだけです。 vcl_recvでは任意のURLのテストが可能であり、vcl_fetchではワニスの一般的なアプリケーションです。 recvでは、着信要求を分析します。フェッチでは、バックエンドの応答を分析します。

通常、リクエストをrecvで操作し、それをバックエンドに送信し、応答をフェッチで操作し、オブジェクトをキャッシュに格納して応答を配信する前に、ヘッダーを適切に書き換えます。

フェッチで行うことができます

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

と同様

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

等々。

0
Stefan Caunter

VarnishがVCLルールを「* .css」にスコープ指定できるとは思いません。これに関する正確な情報については、ワニスのメーリングリストで尋ねなければならない場合があります。 MIMEタイプによるスコーピングが可能である必要があります。

オブジェクトにすでにキャッシュヘッダーが設定されているが、それらを正規化したい場合は、このVarnishドキュメントVCLの修正バージョンが役立ちます。 http://varnish.projects.linpro.no/wiki/VCLExampleLongerCaching

一般に、Varnishは、大量のヘッダーまたはコンテンツの書き換えを行うようには構築されていません。 WebサーバーまたはWebアプリケーションは、Varnishよりもこれをうまく行う必要があります。

0
Jesper M