repoze.bfg プロジェクトで Varnish 3.0 で ESI を使用すると問題が発生します。ESI タグを介して含まれる、ログインしているユーザーの通知を表示する ESI フラグメントがあります。ただし、varnish は含まれている ESI フラグメントをキャッシュするため、手動で、またはセッションの結果としてフラグメントに加えられた変更は、含まれている (およびキャッシュされた) Web ページには反映されません。
使用されている ESI タグ:
VCL 構成:
sub vcl_recv {
if (req.url ~ "[A-Za-z0-9_-]*.esi$") {
return (pass);
}
if (req.http.cookie) {
set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
if (req.http.cookie ~ "^ *$") {
remove req.http.cookie;
}
}
remove req.http.cookie;
remove req.http.etag;
}
sub vcl_fetch {
remove beresp.http.Set-Cookie;
remove beresp.http.ETag;
#do esi processing
set beresp.do_esi = true;
if (bereq.url ~ "[A-Za-z0-9_-]*.esi$") {
set beresp.ttl = 0s;
} else {
set beresp.ttl = 24h;
}
}
私の仮定は次のとおりです。
1) Varnish は、特に beresp.ttl がすべての .esi フラグメントに対して 0 に設定されているため、キャッシュ ストアから取得するたびに「path/to/fragment.esi」と再構築するキャッシュ Web ページに要求を行います 2) Varnish ESIフラグメントをWebページとともにキャッシュストアに保存しません**