Apache 網頁伺服器 (Apache Web Server) 上要如何設定以啟用壓縮功能,將輸出的網頁或資源檔案做壓縮後再送往瀏覽器端。也就是,開啟 mod_deflate 壓縮輸出的網頁或資源檔案以節省頻寬 (一般可省 2~3 倍以上)。
以下的範例說明瀏覽器和網頁伺服器間對於支援壓縮功能是如何溝通的:
瀏覽器:在送往伺服器的 HTTP 要求中會含有一個 Accept-Encoding 欄位說明自己支援的壓縮機制有哪些 (各壓縮機制以逗號「,」分開):
Accept
|
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
Accept-Encoding
|
gzip, deflate
|
Accept-Language
|
en-US,zh-TW;q=0.8,zh;q=0.5,en;q=0.3
|
Connection
|
keep-alive
|
Cookie
|
JSESSIONID="t5mGUd87rGbXsUQX1ij9M09s.slave:slave-server-one"; LtpaToken=AAECAzU2MDBGQ0VCNTYwMTI3MUJDTj1wb2x
|
DNT
|
1
|
Host
|
eap.globeunion.com
|
Referer
|
http://eap.globeunion.com/GUSSH/
|
User-Agent
|
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
|
網頁伺服器:如果伺服器支援一個或多個瀏覽器所列的壓縮機制,則輸出的資料會被這一個或多個壓縮機制處理後送往瀏覽器,然後送出的 HTTP 回應中會含有一個 Content-Encoding 欄位說明用了資料被那些壓縮機制 (各壓縮機制以逗號「,」分開):
Cache-Control
|
No-Cache
|
Connection
|
Keep-Alive
|
Content-Encoding
|
gzip
|
Content-Length
|
6980
|
Content-Type
|
text/html;charset=UTF-8
|
Date
|
Tue, 22 Sep 2015 08:01:40 GMT
|
Expires
|
Thu, 01 Jan 1970 00:00:00 GMT
|
Keep-Alive
|
timeout=5, max=99
|
Pragma
|
No-Cache
|
Vary
|
Accept-Encoding
|
X-Powered-By
|
JSP/2.2
|
如下圖:
如何設定 Apache 網頁伺服器以啟用壓縮功能
0. 確認 Apache 網頁有安裝 deflate 模組
1. 在 httpd.conf 設定檔中確認 deflate 模組有設定載入,並且有做以下設定:
…..
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
…..
# 2015/09/22, added by polin wei
<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
#Instead of blacklist, we use a whitelist:
BrowserMatch ^MSIE [6-9] gzip
</IfModule>
<LocationMatch ".*\.jsp$">
ForceType text/html
</LocationMatch>
2. 重新啟動 Apache 網頁伺服器:sudo service httpd restart
在上面的設定範例中,我們用最高的壓縮等級 (CompressionLevel) 9 (可用的數值 1 ~ 9),其實到 5 左右就有不錯的壓縮比例。而對於要根據檔案類型去啟用壓縮功能的列在「AddOutputFilterByType DEFLATE」之後;而對於要根據檔案“附檔名名稱”去啟用壓縮功能的列在「AddOutputFilter DEFLATE」之後。
留言列表