2

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ページとともにキャッシュストアに保存しません**

4

1 に答える 1

0

まず、*.esi URL のキャッシュを完全にスキップしてみます。つまり、return(pass); です。set beresp.ttl = 0s の代わりに;

于 2011-09-09T08:15:16.167 に答える