1. 程式人生 > 實用技巧 >Nginx開啟gzip

Nginx開啟gzip

1. ngx_http_gzip_module

ngx_http_gzip_module是nginx中堆響應以gzip方式進行壓縮的一個攔截器,以減少傳輸資料的大小。

配置示例:

gzip on;
gzip_min_length  5k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

2. 配置項說明

gzip on/off
Syntax:	gzip on | off;
Default:	gzip off;
Context:	http, server, location, if in location

開啟/關閉gzip

gzip_buffers
Syntax:	gzip_buffers number size;
Default:	gzip_buffers 32 4k|16 8k;
Context:	http, server, location

設定系統獲取幾個單位的快取用於儲存gzip的壓縮結果資料流。 例如 4 4k 代表以4k為單位,按照原始資料大小以4k為單位的4倍申請記憶體。 4 8k 代表以8k為單位,按照原始資料大小以8k為單位的4倍申請記憶體。如果沒有設定,預設值是申請跟原始資料相同大小的記憶體空間去儲存gzip壓縮結果。

gzip_comp_level
Syntax:	gzip_comp_level level;
Default:	gzip_comp_level 1;
Context:	http, server, location

設定壓縮級別,可接受的值有1-9。數字越大壓縮比越高,同時對CPU的消耗也越大。一般建議設定成4-5。下面是一張壓縮比的圖可做參考(圖片來源:https://seo.g2soft.net/2015/11/19/nginx-gzip-comp-level.html):

gzip_disable
Syntax:	gzip_disable regex ...;
Default:	—
Context:	http, server, location
This directive appeared in version 0.6.23.

匹配User-Agent頭部資訊決定哪些內容不需要壓縮。

gzip_http_version
Syntax:	gzip_http_version 1.0 | 1.1;
Default:	gzip_http_version 1.1;
Context:	http, server, location

設定最低的需要壓縮的HTTP協議版本。由於早期的瀏覽器不支援gzip壓縮,壓縮之後會亂碼。

gzip_min_length
Syntax:	gzip_min_length length;
Default:	gzip_min_length 20;
Context:	http, server, location

設定最小的需要壓縮的內容長度,小於該值的內容不會進行壓縮。1k表示小於1k的內容不進行壓縮。

gzip_proxied
Syntax:	gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
Default:	gzip_proxied off;
Context:	http, server, location

Nginx作為反向代理的時候啟用,根據某些請求和應答來決定是否在對代理請求的應答啟用gzip壓縮,是否壓縮取決於請求頭中的“Via”欄位,指令中可以同時指定多個不同的引數,意義如下:

  • expired - 啟用壓縮,如果header頭中包含 "Expires" 頭資訊
  • no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭資訊
  • no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭資訊
  • private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭資訊
  • no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭資訊
  • no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭資訊
  • auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭資訊
  • any - 無條件啟用壓縮
gzip_types
Syntax:	gzip_types mime-type ...;
Default:	gzip_types text/html;
Context:	http, server, location

指定壓縮的MIME型別。

gzip_vary
Syntax:	gzip_vary on | off;
Default:	
gzip_vary off;
Context:	http, server, locatio

和http頭有關係,加個vary頭,給代理伺服器用的,有的瀏覽器支援壓縮,有的不支援,所以避免浪費不支援的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮。

參考文章