Apache啟用GZIP壓縮網頁傳輸方法

來源:互聯網
上載者:User

一、gzip介紹

Gzip是一種流行的檔案壓縮演算法,現在的應用十分廣泛,尤其是在Linux平台。當應用Gzip壓縮到一個純文字檔案時,效果是非常明顯的,大約可以減少70%以上的檔案大小。這取決於檔案中的內容。 利用Apache中的Gzip模組,我們可以使用Gzip壓縮演算法來對Apache伺服器發布的網頁內容進行壓縮後再傳輸到用戶端瀏覽器。這樣經過壓縮後實際上降低了網路傳輸的位元組數,最明顯的好處就是可以加快網頁載入的速度。

網頁載入速度加快的好處不言而喻,除了節省流量,改善使用者的瀏覽體驗外,另一個潛在的好處是Gzip與搜尋引擎的抓取工具有著更好的關係。

二、Web伺服器處理

HTTP壓縮的過程如下:

Web伺服器接收到瀏覽器的HTTP請求後,檢查瀏覽器是否支援HTTP壓縮(Accept-Encoding 資訊);

如果瀏覽器支援HTTP壓縮,Web伺服器檢查請求檔案的尾碼名;

如果請求檔案是HTML、CSS等靜態檔案,Web伺服器到壓縮緩衝目錄中檢查是否已經存在請求檔案的最新壓縮檔;

如果請求檔案的壓縮檔不存在,Web伺服器向瀏覽器返回未壓縮的請求檔案,並在壓縮緩衝目錄中存放請求檔案的壓縮檔;

如果請求檔案的最新壓縮檔已經存在,則直接返回請求檔案的壓縮檔;

如果請求檔案是動態檔案,Web伺服器動態壓縮內容並返回瀏覽器,壓縮內容不存放到壓縮緩衝目錄中。

三、開啟Gzip

Apache利用Gzip壓縮演算法進行壓縮的模組有兩種:mod_gzip 和mod_deflate。

現在瀏覽器本身也自動Gzip壓縮功能,支援Accept-Encoding: gzip,deflate ,這裡我在firefox瀏覽器下測試。 

通過查看HTTP頭,我們可以快速判斷使用的用戶端瀏覽器是否支援接受gzip壓縮。

若發送的HTTP頭中出現以下資訊,則表明你的瀏覽器支援接受相應的gzip壓縮:

Accept-Encoding: gzip 支援mod_gzip

Accept-Encoding: deflate 支援mod_deflate

Accept-Encoding: gzip,deflate

同時支援mod_gzip 和mod_deflate Apache內建有mod_deflate模組來啟用gzip功能,但假如安裝apache的時候沒有編譯相關模組,就需要你手動安裝一次,以啟用它:

首先到你的apache源碼目錄,尋找到mod_deflate.c檔案 ,通常位置:apachehttpd源碼目錄/modules/filters/mod_deflate.c,進入上面找到的目錄運行下面的命令:

/usr/local/apache2/bin/apxs -i -c -a mod_deflate.c

註:apxs目錄請參照您自己的機器,通常在apache安裝目錄的bin目錄下。

安裝完成,到apache的modules目錄看看是不是有了mod_deflates.so,httpd.conf中開啟deflate_Module和headers_Module模組:

LoadModule deflate_module modules/mod_deflate.so

載入mod_deflate.so模組,預設安裝會自動寫入httpd.conf。

如果伺服器開啟了對Gzip組件的支援,那麼我們就可以在http.conf定製檔案壓縮,下面是一個配置的簡單一實例:

1、mod_gzip方式

# mod_gzip

<ifModule mod_gzip.c>

mod_gzip_on Yes

mod_gzip_dechunk Yes

mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$

mod_gzip_item_include handler ^cgi-script$

mod_gzip_item_include mime ^text/.*

mod_gzip_item_include mime ^application/x-javascript.*

mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

<ifModule>

 

2、deflate_Module方式 

(1)嚴格匹配檔案類型

# mod_deflate:

<ifmodule mod_deflate.c>

DeflateCompressionLevel 6 #壓縮率, 6是建議值.

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/php

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/atom_xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE application/x-httpd-php

AddOutputFilterByType DEFLATE image/svg+xml

AddOutputFilterByType DEFLATE image/gif image/png  image/jpe image/swf image/jpeg image/bmp

# Don’t compress images and other  #排除不需要壓縮的檔案

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-varySetEnvIfNoCase

#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary

</ifmodule>

(2)過濾檔案類型

# mod_deflate:

<ifmodule mod_deflate.c>

DeflateCompressionLevel 6

SetOutputFilter DEFLATE    #壓縮所有檔案

#Don’t compress images and other  #過濾不需要壓縮檔

#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary

</IfModule>

檔案MIME類型可以根據自己情況添加,也可以通過瀏覽器查看connect-type:

 

四、mod_gzip 和mod_deflate的主要區別是什嗎?(來自互連網)

首先一個區別是安裝它們的Apache Web伺服器版本的差異。Apache 1.x系列沒有內建網頁壓縮技術,所以才去用額外的第三方mod_gzip 模組來執行壓縮。而Apache 2.x官方在開發的時候,就把網頁壓縮考慮進去,內建了mod_deflate 這個模組,用以取代mod_gzip。雖然兩者都是使用的Gzip壓縮演算法,它們的運作原理是類似的。 第二個區別是壓縮品質。mod_deflate 壓縮速度略快而mod_gzip 的壓縮比略高。一般預設情況下,mod_gzip 會比mod_deflate 多出4%~6%的壓縮量。 那麼,為什麼使用mod_deflate?第三個區別是對伺服器資源的佔用。 一般來說mod_gzip 對伺服器CPU的佔用要高一些。mod_deflate 是專門為確保伺服器的效能而使用的一個壓縮模組,mod_deflate 需要較少的資源來壓縮檔。這意味著在高流量的伺服器,使用mod_deflate 可能會比mod_gzip 載入速度更快。  

五、效果

chrome 查看: F12 ——》偵錯模式 ——》 網路 ——》選中左側一個請求檔案,如


沒有啟動Gzip壓縮:

啟動Gzip壓縮:

大小由10.7K到1.5K,如果檔案較大,那麼效果會更明顯。


參考推薦:

Apache啟用GZIP壓縮網頁傳輸方法

php gzip壓縮輸出的實現方法


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.