Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> 關於服務器 >> linux服務器的Gzip文件壓縮方法

linux服務器的Gzip文件壓縮方法

日期:2017/2/8 10:24:42      編輯:關於服務器

使用mod_gzip 和 mod_deflate對網頁內容進行壓縮

Gzip是一種流行的文件壓縮算法,現在的應用十分廣泛,尤其是在Linux平台。當應用Gzip壓縮到一個純文本文件時,效果是非常明顯的,大約可以減少70%以上的文件大小。這取決於文件中的內容。

利用Apache中的Gzip模塊,我們可以使用Gzip壓縮算法來對Apache服務器發布的網頁內容進行壓縮後再傳輸到客戶端浏覽器。這樣經過壓縮後實際上降低了網絡傳輸的字節數,最明顯的好處就是可以加快網頁加載的速度。

網頁加載速度加快的好處不言而喻,除了節省流量,改善用戶的浏覽體驗外,另一個潛在的好處是Gzip與搜索引擎的抓取工具有著更好的關系。例如Google就可以通過直接讀取gzip文件來比普通手工抓取更快地檢索網頁。在Google網站管理員工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作為Sitemap被提交的。

而這些好處並不僅僅限於靜態內容,PHP動態頁面和其他動態生成的內容均可以通過使用Apache壓縮模塊壓縮,加上其他的性能調整機制和相應的服務器端緩存規則,這可以大大提高網站的性能。

因此,對於部署在Linux服務器上的PHP程序,在服務器支持的情況下,我們建議你開啟使用Gzip Web壓縮。

二、 Gzip Web壓縮工作原理

Web服務器處理HTTP壓縮的過程如下:

1. Web服務器接收到浏覽器的HTTP請求後,檢查浏覽器是否支持HTTP壓縮(Accept-Encoding 信息);

2. 如果浏覽器支持HTTP壓縮,Web服務器檢查請求文件的後綴名;

3. 如果請求文件是HTML、CSS等靜態文件,Web服務器到壓縮緩沖目錄中檢查是否已經存在請求文件的最新壓縮文件;

4. 如果請求文件的壓縮文件不存在,Web服務器向浏覽器返回未壓縮的請求文件,並在壓縮緩沖目錄中存放請求文件的壓縮文件;

5. 如果請求文件的最新壓縮文件已經存在,則直接返回請求文件的壓縮文件;

6. 如果請求文件是動態文件,Web服務器動態壓縮內容並返回浏覽器,壓縮內容不存放到壓縮緩存目錄中。

下面是兩個演示圖:

未使用Gzip:

Apache Web Gzip

開啟使用Gzip後:

Apache Web Gzip

、讓我們開始吧!

Apache上利用Gzip壓縮算法進行壓縮的模塊有兩種:mod_gzip 和mod_deflate。要使用Gzip Web壓縮,請首先確定你的服務器開啟了對這兩個組件之一的支持。在Linux服務器上,現在已經有越來越多的空間商開放了對它們的支持,有的甚至是同時支持這兩個模塊的。例如目前Godaddy、Bluehost及DreamHosts等空間商的服務器都已同時支持mod_gzip 和mod_deflate。

雖然使用Gzip同時也需要客戶端浏覽器的支持,不過不用擔心,目前大部分浏覽器都已經支持Gzip了,如IE、Mozilla Firefox、Opera、Chrome等。

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

若發送的HTTP頭中出現以下信息,則表明你的浏覽器支持接受相應的gzip壓縮:

Accept-Encoding: gzip     支持mod_gzip
Accept-Encoding: deflate     支持mod_deflate
Accept-Encoding: gzip,deflate    同時支持mod_gzip 和mod_deflate

如果服務器開啟了對Gzip組件的支持,那麼我們就可以在http.conf或.htaccess裡面進行定制,下面是一個.htaccess配置的簡單實例:

 

# 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>

 

 

# mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #壓縮率, 6是建議值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
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
</ifmodule>

 

裡面的文件MIME類型可以根據自己情況添加,至於PDF 、圖片、音樂文檔之類的這些本身都已經高度壓縮格式,重復壓縮的作用不大,反而可能會因為增加CPU的處理時間及浏覽器的渲染問題而降低性能。所以就沒必要再通過Gzip壓縮。

通過以上設置後再查看返回的HTTP頭,出現以下信息則表明返回的數據已經過壓縮。即網站程序所配置的Gzip壓縮已生效。

Content-Encoding: gzip

注:不管使用mod_gzip 還是mod_deflate,此處返回的信息都一樣。因為它們都是實現的gzip壓縮方式。

除此之外,還可以通過一些在線檢測工具(如:http://www.whatsmyip.org/http_compression/)來檢測你的網站內容是否已經過Gzip壓縮。

四、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 加載速度更快。

不太明白?簡而言之,如果你的網站,每天不到1000獨立訪客,想要加快網頁的加載速度,就使用mod_gzip。雖然會額外耗費一些服務器資源,但也是值得的。如果你的網站每天超過1000獨立訪客,並且使用的是共享的虛擬主機,所分配系統資源有限的話,使用mod_deflate 將會是更好的選擇。

另外,從Apache 2.0.45開始,mod_deflate 可使用DeflateCompressionLevel 指令來設置壓縮級別。該指令的值可為1至(壓縮速度最快,最低的壓縮質量)9(最慢的壓縮速度,壓縮率最高)之間的整數,其默認值為6(壓縮速度和壓縮質量較為平衡的值)。這個簡單的變化更是使得mod_deflate 可以輕松媲美mod_gzip 的壓縮。

P.S. 對於沒有啟用以上兩種Gzip模塊的虛擬空間,還可以退而求其次使用php的zlib函數庫(同樣需要查看服務器是否支持)來壓縮文件,只是這種方法使用起來比較麻煩,而且一般會比較耗費服務器資源,請根據情況慎重使用。

Linux 空間不支持mod_gzip、mod_deflate模塊

Linux 空間不支持mod_gzip、mod_deflate模塊,若想通過GZIP壓縮網頁內容,可以考慮兩種方式,開啟zlib.output_compression或者通過ob_gzhandler編碼的方式。

zlib.output_compression是在對網頁內容壓縮的同時發送數據至客戶端,ob_gzhandler是等待網頁內容壓縮完畢後才進行發送,相比之下前者效率更高,但需要注意的是,兩者不能同時使用,只能選其一,否則將出現錯誤。

下文僅針對GoDaddy Deluxe Hosting – Linux 空間,對兩者的實現方式做簡單描述。

在默認情況下,zlib.output_compression是關閉的,如需開啟需編輯php5.ini文件,加入以下內容:

 

zlib.output_compression = On
zlib.output_compression_level = 6

 

然後將php5.ini上傳到FTP根目錄下,剩下的事請就是等待它生效,這可能需要一段時間,可以通過phpinfo()函數檢測結果:

 

Directive                       Local Value   Master Value
zlib.output_compression         On            On
zlib.output_compression_level   6             6

 

當zlib.output_compression的Local Value和MasterValue的值同為On時,表示已經生效,這時候訪問的PHP頁面(包括偽靜態頁面)已經GZIP壓縮了,通過Firebug或者在線網頁GZIP壓縮檢測工具可檢測到壓縮的效果。

如果需要使用ob_gzhandler,則需關閉zlib.output_compression,把php5.ini文件內容更改為:

 

zlib.output_compression = Off
zlib.output_compression_level = -1

 

ob_gzhandler是GoDaddy官網推薦的用法,通過在PHP文件中插入相關代碼實現GZIP壓縮,以下是GoDaddy幫助中心所提到的:

 

GZIP Compression

Smaller pages load faster, regardless of your Internet connection speed. You can make your pages smaller by compressing them with GZIP. For more information about GZIP and our hosting, see Compressing Web Pages for Faster Load Times.

 

《Compressing Web Pages for Faster Load Times》文中提到,將以下PHP代碼加入到PHP文件頂部,即可實現GZIP壓縮。

 

<?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
ob_start("ob_gzhandler");
else
ob_start();
?>

 

不管是zlib.output_compression還是ob_gzhandler,都僅能對PHP文件進行GZIP壓縮,對於HTML、CSS、JS等靜態文件只能通過調用PHP的方式實現。

最後想說的是,現在主流的浏覽器默認使用的是HTTP1.1協議,基本都支持GZIP壓縮,對於IE而言,假如你沒有選中其菜單欄工具-》Internet 選項-》高級-》HTTP 1.1 設置-》使用 HTTP 1.1,那麼,你將感受不到網頁壓縮後的速度提升所帶來的快感!

Copyright © Windows教程網 All Rights Reserved