現在、1人のユーザーからのアイテムをキャッシュするようにワニスを構成できますが、2人目のユーザーがワニスに入ると、Apacheから別のアセットをフェッチします。
複数のユーザーからアクセスできるmagento(css、js、image pdfなど)の背後にある静的アセットをキャッシュするにはどうすればよいですか?
Vcl_recvで、次を構成しました:
if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
unset req.http.Https;
unset req.http.Cookie;
return (lookup);
}
Vcl_fetchの場合:
if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
if (beresp.http.Content-Type ~ "text/html" || beresp.http.Content-Type ~ "text/xml")
{
# do something
} else {
unset beresp.http.expires;
unset beresp.http.set-cookie;
set beresp.ttl = 300h;
}
これには、ある種のクライアントのフィンガープリントを使用してキャッシュを格納するvcl_hashと関係があると思われます。
特定のアセットタイプに対してのみハッシュする方法を操作する方法はありますか?
編集1:完全な設定: http://Pastebin.com/mzSVpEqN
私はこれを解決する方法を見つけました。
ワニスは、特定のユーザーエージェントごとに異なるキャッシュページを保存します。ユーザーエージェントを正規化するための次の手法を見つけました( https://www.varnish-cache.org/trac/wiki/VCLExampleNormalizeUserAgent )
すべてを1つのバスケットに入れるだけで、ヒット数が大幅に増加します。
Vcl_recvの場合:
if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
set req.http.user-agent = "Mozilla";
unset req.http.Https;
unset req.http.cookie;
return (lookup);
}
コメントに記載されているように、vcl_hash
関数をコメントアウトし(他に必要ない場合)、改善が見られることを願っています。
HTH!
Varnishは、バックエンドからのVaryヘッダーを尊重します。バックエンドがVary:User-Agentを送信しない限り、User-Agentクライアントヘッダーを正規化する理由はありません。