啟用 Apache 伺服器的 Gzip 壓縮傳輸

Apache Server Gzip

啟用 Apache 伺服器的 Gzip 壓縮來減少傳輸流量,提升資料的傳輸速度。

介紹

Apache 伺服器在第 2 版之後,內建了 Gzip 的壓縮傳輸功能,但預設是沒有開啟的。開啟 Gzip 壓縮傳輸有什麼好處?首先它會對指定檔案,像是 html、css 等,在壓縮之後才傳輸,壓縮之後檔案就變小了,因此可以讓傳輸的流量變小,速度也會加快。如果要傳輸的檔案很大,開啟 Gzip 壓縮傳輸將會很明顯的得到速度的提升。

以下是我在啟用 Gzip 壓縮前後的一些變化,我用的是 Firefox 的 開發者工具箱->網路 工具來查看資料的變化。
在未開啟 Gzip 模組的情況下,傳輸的容量是 50.34k: 花費的時間是 1.48 秒
接著我啟用了 Gzip 壓縮傳輸後,你可以看到傳輸容量已經從原本的 50.34k 降到 4.75k,檔案本身的大小也稍微變小了幾k: 花費的時間降為 0.9 秒
你可以看到傳輸量很明顯的變小了,時間也快了一點。雖然從 1.48 秒變為 0.9 秒,以人類的感覺來說,可能不是很明顯,但是積少成多,如果檔案很大,就會明顯感受到它的好處。

另外,要如何知道檔案有使用 Gzip 壓縮傳輸,在 開發者工具箱->網路中,點選該檔案,在檔頭中如果有出現 Content-Encoding: "gzip",如下圖: 就表示這個檔案是經過 gzip 壓縮後傳輸的。你可以看看你使用的瀏覽器支援何種壓縮: 這是 Firefox 支援的壓縮方式。

如何啟用

註:這裡使用的作業系統是 Centos。

編輯 http.conf

vim /etc/httpd/conf/httpd.conf
檢查看看是否有載入以下模組:
LoadModule deflate_module modules/mod_deflate.so
沒有的話請自行加入。
vim 操作提示,輸入 / 可以查詢,所以接著輸入 LoadModulemod_deflate。如果前面有加 # 字號,那是註解,把它刪掉來啟用。

編輯 deflate.conf

這個檔案預設應該是沒有,所以直接開啟來建立檔案:
vim /etc/httpd/conf.d/deflate.conf
複製貼上以下內容:
#Set to gzip all output
SetOutputFilter DEFLATE
#AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php

#exclude the following file types
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf|mp3)$ no-gzip dont-vary

#set compression level
DeflateCompressionLevel 6

#Handle browser specific compression requirements
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
說明: SetOutputFilter DEFLATE 這行會把所有要輸出的檔案都壓縮,相反的你可以用 AddOutputFilterByType DEFLATE 後面加上指定的 MIME 類型的檔案,來指定只壓縮某些類型的檔案(這裡註解掉不使用)。
因為我們指定所有輸出的檔案都要壓縮,但其實有些檔案執行壓縮的效率不高,所以要排除,避免耗用太多 CPU,使用 SetEnvIfNoCase Request_URI 來把這些類型的檔案排除。
接著設定壓縮等級,等級從 1 到 9 級,數字越高,壓縮率越高,但 CPU 耗用的也越大,可以自行調整,預設是 6,不建議設太高,除非你伺服器的 CPU 閒閒沒事做。
最後就是針對瀏覽器做個別調整。

這樣還沒完成,記得要重新啟動 Apache 伺服器:
service httpd restart

另外,你也可以單獨在 .htaccess 檔中設定。
如果是使用 Nginx 伺服器,在官方網站也有說明如何啟用:Module ngx_http_gzip_module

完成後,可以在 Check HTTP Compression 這個網站測試看看效能如何。

參考資料

本文網址:https://blog.tonycube.com/2016/09/apache-gzip.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。