Gzip 與反向代理記憶體
我有一個在 Ruby on Rails 上執行的大部分靜態站點,它使用 Varnish 反向代理記憶體來節省對 Rails 後端的點擊。
問題是使用者可以登錄網站,當他們登錄時,我們使用 ESI(邊緣包括)來顯示頁面的使用者特定部分。
使用 ESI 意味著我們必須在 Rails 後端禁用 Gzip 壓縮(使用 Nginx+passenger),否則 varnish 無法解析從後端返回的數據以執行 ESI 處理。
我的問題是,使用反向代理記憶體的好處是否超過了壓縮所有內容的好處?還是我應該嘗試完全擺脫 ESI 並擁有兩全其美的優勢?
如果你安排這樣的事情,你可以兩全其美:
使用者 -> nginx -> Varnish -> Rails
打開從 nginx 到使用者的 gzip 壓縮。這是最慢的部分,也是最昂貴的部分。我假設您的 nginx、Varnish 和 Rails 實例是彼此本地的。您的本地頻寬應該綽綽有餘。此外,僅使用 gzip 解壓縮以組裝 ESI 並沒有太大意義。
如果頻寬不是問題,並且載入時間在沒有 gzip 的情況下是可以接受的,那麼您絕對應該關閉 gzip。
Gzipping 會佔用大量 CPU 資源。因此,如果您更關心 CPU 而不是頻寬,如果站點載入速度足夠快,並且如果 ESI 對您有很大幫助,那麼反向代理記憶體系統肯定比 gzip 壓縮 http 響應更有好處。
在其他情況下,頻寬很重要,gzip 可能更重要,但這裡似乎並非如此。
最後,gzipping 可以通過一些反向代理來完成。這是一個很大的可能性,因為反向代理通常不會使用太多 CPU(如果它們在單獨的伺服器上)。這為後端節省了大量 CPU 週期,也節省了頻寬,但目前,如果我沒記錯的話,Varnish 不支持 gzipping。