如何設定 Apache 網頁伺服器以壓縮輸出的網頁或資源檔案?

說明
一般搜尋引擎會建議網站的伺服器對其輸出的網頁或資源檔案啟用壓縮功能以減少網路上資料傳輸量、節省珍貴的頻寬 (這省的只有伺服器到使用者的網頁瀏覽這個方向的頻寬)。因為一般網頁伺服器以及瀏覽器所在的電腦這兩者都還有剩餘運算量,且壓縮過、小一點的資料能讓整個頁面資料快速地通過壅塞的傳輸網路上的各節點,所以也可以使得網頁頁面呈現速度變快。
這一篇文章要介紹 Apache 網頁伺服器 (Apache Web Server) 上要如何設定以啟用壓縮功能,將輸出的網頁或資源檔案做壓縮後再送往瀏覽器端。也就是,開啟 mod_deflate 壓縮輸出的網頁或資源檔案以節省頻寬 (一般可省 2~3 倍以上)。

特別要注意的是瀏覽器和網頁伺服器都要同時都支援此功能,此功能才會能運作。以下的範例說明瀏覽器和網頁伺服器間對於支援壓縮功能是如何溝通的:

o 瀏覽器:在送往伺服器的 HTTP 要求中會含有一個 Accept-Encoding 欄位說明自己支援的壓縮機制有哪些 (各壓縮機制以逗號「,」分開):
GET /encrypted-area HTTP/1.1
Host: xxx.chihchia.com
Accept-Encoding: gzip, deflate

o 網頁伺服器:如果伺服器支援一個或多個瀏覽器所列的壓縮機制,則輸出的資料會被這一個或多個壓縮機制處理後送往瀏覽器,然後送出的 HTTP 回應中會含有一個 Content-Encoding 欄位說明用了資料被那些壓縮機制 (各壓縮機制以逗號「,」分開):
HTTP/1.1 200 OK
Date: Mon, 23 May 2013 21:36:22 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Thr, 14 Feb 2013 21:36:15 GMT
Etag: “3f80f-1b6-3e1cb03b”
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

如何設定 Apache 網頁伺服器以啟用壓縮功能

0o 確認 Apache 網頁有安裝 deflate 模組

1o 在 httpd.conf 設定檔中確認 deflate 模組有設定載入,並且有做以下設定:

…..
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
…..
# 2013/02/14, added by jjdai
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/x-httpd-php
AddOutputFilter DEFLATE js css gif
</IfModule>

2o 重新啟動 Apache 網頁伺服器:sudo service httpd restart

在上面的設定範例中,我們用最高的壓縮等級 (CompressionLevel) 9 (可用的數值 1 ~ 9),其實到 5 左右就有不錯的壓縮比例。而對於要根據檔案類型去啟用壓縮功能的列在「AddOutputFilterByType DEFLATE」之後;而對於要根據檔案“附檔名名稱”去啟用壓縮功能的列在「AddOutputFilter DEFLATE」之後。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.