伺服器端如何開啟GZIP壓縮功能

唯獨黑白丶發表於2019-03-03

我們知道做好負載均衡對網站的正常執行,使用者體驗相當重要。在負載均衡中有一個必須要做的事情就是給伺服器開啟GZIP壓縮功能,對使用者請求的頁面進行壓縮處理,以達到節省網路頻寬,提高網站速度的作用。

GZIP是若干檔案壓縮程式的簡稱,通常指GNU計劃的實現,此處的GZIP代表的就是GUN ZIP,這也是HTTP1.1協議定義的兩種壓縮方法中最常用的一種壓縮方法,客戶端瀏覽器大都支援這種壓縮格式。接下來,DNSLA將介紹apache、IIS、nginx 這些現在流行的web伺服器如何開啟GZIP壓縮的方法。

Apache如何開啟GZIP功能

Apache開啟GZIP要看檢視是否已經開啟mod_deflate模組,如果沒有則需要先載入,在配置檔案httpd.conf中將

LoadModule deflate_module modules/mod_deflate.so

LoadModule headers_module modules/mod_headers.so
複製程式碼

前面的#號去掉。DNSLA建議,如果對apache的配置檔案不太懂的客戶在修改配置檔案之前對配置檔案進行備份。

開啟模組後,在httpd.conf配置檔案的最下面空白處新增一下內容:

<IfModule mod_deflate.c>
# 告訴 apache 對傳輸到瀏覽器的內容進行壓縮
SetOutputFilter DEFLATE
# 壓縮等級 9
DeflateCompressionLevel 9
</IfModule>
複製程式碼

這樣就能對所有檔案進行 gzip 壓縮了。壓縮等級是個 1-9 之間的整數,取值範圍在 1(最低) 到 9(最高)之間,不建議設定太高,雖然有很高的壓縮率,但是佔用更多的CPU資源。

實際開發中我們並不需要對所有檔案進行壓縮,比如我們無需對圖片檔案進行gzip壓縮,因為圖片檔案(一般為jpg、png等格式)本身已經壓縮過了,再進行gzip壓縮可能會適得其反(詳見圖片要啟用gzip壓縮嗎?絕對不要!,背景圖片千萬不要gzip壓縮,尤其是PNG),類似的還有 PDF 以及音樂檔案。所以我們可以設定過濾指定檔案或者對指定檔案進行壓縮。

比如我們要對圖片等特殊檔案不進行 gzip 壓縮處理:

<IfModule mod_deflate.c>
# 告訴 apache 對傳輸到瀏覽器的內容進行壓縮
SetOutputFilter DEFLATE
# 壓縮等級 9
DeflateCompressionLevel 9
#設定不對字尾gif,jpg,jpeg,png的圖片檔案進行壓縮
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
複製程式碼

或者指定檔案格式進行壓縮:

<IfModule mod_deflate.c>
# 壓縮等級 9
DeflateCompressionLevel 9
# 壓縮型別 html、xml、php、css、js
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
AddOutputFilter DEFLATE js css
</IfModule>
複製程式碼

其中DeflateCompressionLevel 的意思是壓縮等級,共分為1-9,9級為最高,不建議使用太高的壓縮比,這樣會對CPU產生太大的負擔。

IIS如何開啟GZIP功能

開啟IIS管理工具,在右鍵網站開啟網站屬性,在服務選項卡中開啟HTTP壓縮,不建議選中壓縮應用程式檔案,但一定要選上壓縮靜態檔案,不然就等於沒有壓縮,達不到負載均衡了。然後選中我那個站下面那個伺服器擴充套件,新建一個伺服器擴充套件,名字為GZIP,下面的新增檔案路徑為:c:windowssystem32inetsrvgzip.dll,然後啟用這個擴充套件。DNSLA提醒大家,還沒結束,第三步是,我們要修改配置檔案,在配置檔案之前要停止IIS服務,(DNSLA提醒大家一定要先關閉IIS服務)開啟C:WindowsSystem32inetsrvMetaBase.xml,這個檔案很大,找到下面一段資訊:

<IIsCompressionScheme  Location ="/LM/W3SVC/Filters/Compression/gzip"

HcCompressionDll="%windir%system32inetsrvgzip.dll"

HcCreateFlags="1"

HcDoDynamicCompression="TRUE"

HcDoOnDemandCompression="TRUE"

HcDoStaticCompression="TRUE"

HcDynamicCompressionLevel="0"

HcFileExtensions="htm

html

txt"

HcOnDemandCompLevel="10"

HcPriority="1"

HcScriptFileExtensions="asp

dll

exe"

>

</IIsCompressionScheme>
複製程式碼

修改這個檔案是要增加一些要進行壓縮的檔案字尾,其中 HcFileExtensions 是靜態檔案的副檔名,增加 js 和 css 等;HcScriptFileExtensions 為動態檔案的副檔名,增加 aspx,HcDynamicCompressionLevel改成9,(0-10,6是價效比最高的一個)。

然後需要重啟一下IIS服務即可。

Nginx如何開啟GZIP功能

相對apache 和 IIS nginx開啟GZIP簡單很多,只需要開啟配置檔案 nginx.conf找到gzip on 把前面的註釋符號#去掉即可開啟GZIP服務。然後配置GZIP即可。

下面是一個相對優化不錯的配置,DNSLA建議使用。

Gzip on;

gzip_min_length 1024;

gzip_buffers   4  8k;

gzip_types   text/plain application/x-javascript text/css  application/xml;
複製程式碼

相關文章