歡迎您光臨本站 註冊首頁

關於squid對gzip壓縮的支持(支持nginx,IIS,apache)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

關於squid對gzip壓縮的支持(支持nginx,IIS,apache)

背景介紹:

通常Web伺服器都會通過gzip壓縮來減少用戶下載的流量,提高頁面打開速度。

gzip壓縮分為兩種,http1.0壓縮和http1.1壓縮,這兩種壓縮的壓縮方法和response header都一樣,只是客戶端和伺服器通訊的http協議不同。

Squid2.7之前,是不支持http1.1的。在2.7版本開始,有限支持http1.1。從3.0版本開始,才完整的支持http1.1。但是因為squid3是完全重構的,很多2.7的功能並沒有加到3.0當中,所以squid3並沒有被大規模的應用在生產系統中,基本上都還是使用 squid2.6或2.7來進行內容加速,所以需要搞定Squid支持各種Web伺服器的HTTP1.0 GZIP壓縮。

具體配置:

1, 配置Web伺服器,支持HTTP1.0壓縮

    Apache, 默認就支持http1.0壓縮,不需要特定配置

    IIS, 通過修改MetaBase.xml第三段IIsCompressionSchemes中的

    * HcNoCompressionForHttp10="TRUE"
    * HcNoCompressionForProxies="TRUE"
    * HcNoCompressionForRange="FALSE"

    將HcNoCompressionForHttp10="TRUE" 修改為FALSE

    Nginx, 修改nginx.conf中的gzip_version配置項,修改為gzip_version http1.0;

    配置后,再發http1.0的壓縮請求到nginx,就能夠獲得壓縮后的內容。

2, 配置Squid,支持對http1.0壓縮內容的緩存

    首先,將cache_vary設置成on。使squid能夠緩存帶有vary頭的內容

    然後,將broken_vary_encoding設置成all。squid.conf.default中,這個參數的示例是

    acl apache rep_header Server ^Apache
    broken_vary_encoding allow apache

這個挺有趣,我理解這個參數應該是很早加入的,那時候web伺服器還是apache一家的天下。所以作者直接就寫了一個allow apache,並一直沿用至今。

這個參數是針對那些壓縮前和壓縮后etag完全一致的web伺服器,讓squid通過vary頭來區分壓縮和未壓縮的內容。事實上,現在 apache已經不需要通過broken_vary_encoding來區分vary頭了。Apache會修改經過壓縮的內容的etag頭, 在原來的etag後面加上-gzip。用來區分壓縮和非壓縮內容。而其他的web伺服器都沒有這樣的功能。都需要通過配置 broken_vary_encoding來支持。

通過配置上面兩個參數,你就可以配置squid正確的緩存Apache,IIS,Nginx輸出的壓縮內容。

上面介紹的方法,已經經過實際環境的驗證並穩定運行了近一年,沒有出現過壓縮緩存失效的情況。

原文鏈接: http://zys.8800.org/index.php/archives/282
《解決方案》

* HcNoCompressionForRange="FALSE"
有沒有有什麼後裔症?會不會影響效率等?
《解決方案》

原帖由 網路 於 2009-5-13 20:46 發表 http://bbs2.chinaunix.net/images/common/back.gif
* HcNoCompressionForRange="FALSE"
有沒有有什麼後裔症?會不會影響效率等?

不會啊。對於現在的伺服器配置來說,gzip都不會對伺服器造成實際的性能影響。
《解決方案》

:mrgreen: lighttpd有沒有測過
《解決方案》

broken_vary_encoding
Not yet ported from 2.6

該參數沒有從2.6移植出來,莫非3.0不支持壓縮了 ?
《解決方案》

有好多都禁用etag的,還是要通過Vary頭部來區分的
《解決方案》

很有幫助,非常感謝。

[火星人 ] 關於squid對gzip壓縮的支持(支持nginx,IIS,apache)已經有536次圍觀

http://coctec.com/docs/service/show-post-13997.html