2012-11-20 64 views
0

我已經建立了本地光油和已實施在頁面的特定區域的ESI片段;但只要我打開ESI在default.vcl,清漆停止緩存和甚至更多,其中添加的片段頁面的特定部分,呈現一個503服務不可替代的通知。爲什麼使用光油在ESI碎片上得到503服務不可用?

,似乎使清漆停止緩存行是else語句這裏:

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") { 
    unset beresp.http.set-cookie; 
    set beresp.ttl = 20m; 
} 
else { 
    set beresp.do_esi = true; 
} 

這裏是我的default.vcl: http://pastebin.com/MEQF4Gbk

現在,在RxHeaders我得到了很多的「 ESI_xmlerror C無ESI處理,第一個字符不是 '<」'

這裏RxHeaders中的一個的樣本(對於JS文件) http://pastebin.com/tX7zpBN1

我猜,我不明白我怎麼想告訴清漆緩存,只有當它具有ESI片段?有人能解釋我做錯了什麼嗎?

+0

因爲我已經更新了default.vcl這個http://pastebin.com/yaW0hZeL屆時,esi_blocks.vcl是這樣的:http://pastebin.com/1CMr6q4E和drupal.vcl來此http:/ /pastebin.com/cz7zNDqQ,但仍然在該頁的esi碎片部分獲得503錯誤。 – Sam3k

回答

0

您的vcl設置爲不僅處理esi包含esi的頁面,而且還處理esi碎片本身,而後者失敗導致503s而不是您想要的片段。如果你不想遞歸處理片段作爲ESI容器本身,你可以改變你的VCL到:

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") { 
    unset beresp.http.set-cookie; 
    set beresp.ttl = 20m; 
} 
else if (req.esi_level == 0) { 
    set beresp.do_esi = true; 
} 

如果你想處理這些包括自己作爲ESI容器,確保他們開始用尖括號<(清漆2默認僅對html/xml執行esi)。

esi_syntax=0×1 

如果我是你,我會啓用ESI專爲那些能夠包含ESI的資源:如果這是不可能的,你可以在啓動varnishd當配置清漆不設置此參數去關心包括,而不是禁用它選擇你喜歡的內容類型。不包含ESI這樣你就不需要維護您的VCL列表,可能會改變,並且包括資源不會浪費清漆的時間掃描他們。爲此,您可以根據來自像X-光油待辦事項-ESI後端的響應報頭,並只發送響應報頭包含包括資源。