光油ESI:
回答
這看起來像清漆gzip的一個奇怪的錯誤。如果你獲得了壓縮塊通過ESI並且它不在緩存中(MISS),你會得到這個奇怪的符號。如果你從緩存中得到這個塊,一切都可以。解決的辦法是禁用的gzip用於內部路由:
if (req.url ~ "/_internal") {
# Telling ESI that we do not support gzip
remove req.http.Accept-Encoding;
.....
救了我這個:) – Layke
看起來你有雙重壓縮ESI內容
This chapter解釋光油如何ESI加工過程中的工作用gzip。我真的很喜歡這句話:
從理論上講,希望在實踐中,你在上面所讀到的所有內容在啓用ESI時都應該適用,如果不是,那麼它就是你應該報告的錯誤。
長話短說,Varnish的工作原理:在第一次請求頁面時(緩存未命中),一個頁面直接從網頁服務器通過Varnish渲染。之後 - 頁面被放入緩存存儲,因此下一個請求將從存儲中加載(緩存命中)。
不知何故,第一請求頁面中呈現ungzipped,但被放入存儲gzip壓縮。這是發生錯誤的地方。由於nginx總是嘗試gzip內容,因此我們在ungzip頁面中將gzip包括(ESI期間)。
這種行爲在提到文檔章節解釋說:
查找過程中,我們忽略任何「接受編碼」中的對象有所不同:字符串,以避免一個gzip和gunzip'ed對象的版本,清漆可根據需要進行槍支壓制。 (我們落實查找時間這一點魔法,使存儲在持久存儲任何對象可以有或無gzip的支持,使使用。)
所以,這個問題就可以「解決」有一種秒殺 - 通過迫使光油ESI處理期間總是發送ungzipped含量(因爲它是在由one of the answers提到klipach):
# www.vcl
sub vcl_recv {
# ...
if (req.url ~ "/_internal") {
# Telling ESI that we do not support gzip
remove req.http.Accept-Encoding;
return(lookup);
}
# ...
}
- 1. 光油未處理ESI包括
- 2. 光油4 ESI:bereq.url不讀ESI SRC標籤內的網址
- 3. 遞增頁面瀏覽次數與上光油和ESI
- 4. Symfony2中,上光油和ESI導致奇怪的行爲
- 5. 如何使光油停止緩存ESI碎片
- 6. 爲什麼使用光油在ESI碎片上得到503服務不可用?
- 7. 光油安全
- 8. 光油和IIS
- 9. 光油HAproxy食譜
- 10. 光油忽略ttl
- 11. 光油重定向
- 12. Pressflow 5和光油
- 13. 光油未配置?
- 14. 光油寬限期
- 15. obj.ttl在光油4.0</p> <p>光油4.0
- 16. 光油#找不到符號
- 17. 光油:Cacheble但不緩存
- 18. 光油重定向域根
- 19. 光油vcl_hash刪除參數
- 20. 光油和SSL與龐德
- 21. Apache和光油HTTP/HTTPS
- 22. 光油:VCL〜與req值
- 23. 光油Backend_health - 還在生病
- 24. 光油:大師冥想
- 25. 光油配置與phpMyAdmin和
- 26. 光油統計只針對
- 27. 與域名光油配置
- 28. 光油緩存移動
- 29. 光油4:遠程緩存
- 30. 光油nginx緩存問題
此bug已也固定在清漆3.0.3 [清漆緩存3.0.3](HTTPS: //www.varnish-cache.org/releases/varnish-cache-3.0.3) – kjszymanski