2011-08-15 32 views
2

我遇到問題,使用ESI與光油3.0和repoze.bfg項目成功。我有一個ESI片段,顯示登錄用戶的通知,包括通過ESI標籤。但是,varnish會緩存所包含的ESI片段,因此手動或作爲會話結果對片段所做的更改不會反映在包含(和緩存)的網頁中。如使用如何使光油停止緩存ESI碎片

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)清漆將請求「路徑/到/ fragment.esi 「並且每次從其緩存存儲中獲取時重新組裝緩存網頁,特別是因爲對於每個.esi片段,beresp.ttl被設置爲0 2)Varn ish不會將ESI片段與網頁一起存儲在其緩存存儲區中**

+0

請求碎片返回什麼標題? – symcbean

回答

0

我想先嚐試徹底跳過* .esi URL的緩存,即返回(pass);而不是設置beresp.ttl = 0s;