Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Linux 伺服器 Gzip 檔案壓縮完全指南:mod_gzip 與 mod_deflate 選型、配置與效能權衡

編輯:關於伺服器

一、使用 mod_gzip 與 mod_deflate 壓縮網頁內容

Gzip 是流行檔案壓縮演算法,應用極廣,尤其在 Linux 平台。對純文字檔套用 Gzip 效果顯著,約減少 70% 以上檔案大小(視內容而定)。

利用 Apache Gzip 模組,可用 Gzip 壓縮演算法壓縮 Apache 發布的網頁內容再傳輸至客戶端瀏覽器。實際降低網路傳輸位元組數,最明顯好處:加快網頁載入速度。

加快載入速度好處不言而喻:省流量、改善瀏覽體驗外,潛在好處是 Gzip 與搜尋引擎抓取工具關係更好。如 Google 可直接讀取 gzip 檔比手工抓取更快檢索網頁。Google 站長工具中 sitemap.xml.gz 直接作為 Sitemap 提交。

不限靜態內容,PHP 動態頁面與其他動態生成內容均可經 Apache 壓縮模組壓縮,配合其他效能調整與伺服器端快取規則,大幅提升網站效能。
建議:部署於 Linux 伺服器的 PHP 程式,在伺服器支援下,啟用 Gzip Web 壓縮。

二、Gzip Web 壓縮工作原理

  1. Web 伺服器接收瀏覽器 HTTP 請求,檢查是否支援 HTTP 壓縮(Accept-Encoding 資訊)。
  2. 若支援,檢查請求檔案副檔名。
  3. 若為 HTML、CSS 等靜態檔,至壓縮快取目錄檢查是否存在最新壓縮檔。
  4. 若壓縮檔不存在,回傳未壓縮檔案,並在壓縮快取目錄存放壓縮檔。
  5. 若最新壓縮檔已存在,直接回傳壓縮檔。
  6. 若為動態檔,動態壓縮內容回傳瀏覽器,壓縮內容不存入快取目錄。

未使用 Gzip:

開啟 Gzip 後:

三、開始配置!

Apache 利用 Gzip 壓縮的模組有兩種:mod_gzip 和 mod_deflate。啟用 Gzip Web 壓縮,請先確定伺服器支援兩者之一。Linux 伺服器上,越來越多空間商開放支援,甚至同時支援兩者(如 GoDaddy、Bluehost、DreamHost)。

雖需客戶端瀏覽器支援,但現代瀏覽器(IE、Firefox、Opera、Chrome)多已支援。查看 HTTP 標頭可快速判斷:

  • Accept-Encoding: gzip → 支援 mod_gzip
  • Accept-Encoding: deflate → 支援 mod_deflate
  • Accept-Encoding: gzip,deflate → 同時支援

伺服器支援 Gzip 組件時,可在 httpd.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 標頭,出現 Content-Encoding: gzip 表明資料已壓縮,Gzip 生效。(無論用 mod_gzip 或 mod_deflate,回傳資訊相同,因均實現 gzip 壓縮)。
亦可用線上檢測工具(如 whatsmyip.org)檢測。

四、mod_gzip 與 mod_deflate 主要差異與選型建議

  1. Apache 版本差異:Apache 1.x 無內建壓縮技術,用第三方 mod_gzip;Apache 2.x 官方開發時納入壓縮考量,內建 mod_deflate 取代 mod_gzip。兩者同用 Gzip 演算法,運作原理類似。
  2. 壓縮品質:mod_deflate 壓縮速度略快,mod_gzip 壓縮率略高。預設下 mod_gzip 比 mod_deflate 多 4-6% 壓縮量。
  3. 伺服器資源佔用:mod_gzip 佔用 CPU 較高。mod_deflate 專為確保伺服器效能設計,需較少資源壓縮檔案。高流量伺服器用 mod_deflate 可能載入更快。
  4. 選型簡則:日均獨立訪客 < 1000,想加快載入 → 用 mod_gzip(額外耗資源但值得)。日均 > 1000 且用共享虛擬主機資源有限 → 用 mod_deflate 更好。
  5. Apache 2.0.45+ 新特性:mod_deflate 可用 DeflateCompressionLevel 設定壓縮等級(1 最快/最低品質 ~ 9 最慢/最高壓縮率,預設 6 平衡值),這讓 mod_deflate 輕鬆媲美 mod_gzip 壓縮率。

備案:無 mod_gzip/mod_deflate 時的替代方案

虛擬空間未啟用上述模組,可退而求其次用 PHP zlib 函數庫(同樣需查看伺服器支援)壓縮檔案,但較麻煩且一般較耗資源,請謹慎使用。

Linux 空間不支援 mod_gzip/mod_deflate 時

可考慮兩種方式:開啟 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

上傳至 FTP 根目錄,等待生效(需一段時間),用 phpinfo() 檢測:
Directive | Local Value | Master Value
zlib.output_compression | On | On
zlib.output_compression_level | 6 | 6
Local 與 Master 均為 On 即生效,訪問 PHP 頁面(含偽靜態)已 GZIP 壓縮,Firebug 或線上工具可檢測。

若用 ob_gzhandler,需關閉 zlib.output_compression,改 php5.ini:

zlib.output_compression = Off
zlib.output_compression_level = -1

ob_gzhandler 為 GoDaddy 官網推薦用法,在 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 方式實現。

最後提醒:主流瀏覽器預設 HTTP 1.1 協定,基本支援 GZIP。IE 若未勾選「工具 → 網際網路選項 → 進階 → HTTP 1.1 設定 → 使用 HTTP 1.1」,將感受不到壓縮帶來的速度提升!

Copyright © Windows教程網 All Rights Reserved