Nginx壓縮和解壓


本節介紹如何組態響應的壓縮或解壓縮以及傳送壓縮檔案。

在這篇文章中,涉及內容如下 -

  1. 壓縮和解壓縮介紹
  2. 啟用壓縮
  3. 啟用解壓縮
  4. 傳送壓縮檔案

1. 壓縮和解壓縮介紹

壓縮響應通常會顯著減少傳輸資料的大小。 然而,由於壓縮在執行時發生,它還可以增加相當大的處理開銷,這會對效能產生負面影響 在向用戶端傳送響應之前,NGINX會執行壓縮,但不會「壓縮」已壓縮的響應(例如,由代理的伺服器)。

2. 啟用壓縮

要啟用壓縮,請使用包含gzip指令並指定on值。

gzip on;

預設情況下,NGINX僅使用MIME型別text/html壓縮響應。要使用其他MIME型別壓縮響應,請包含gzip_types指令並列出其他型別。

gzip_types text/plain application/xml;

要指定要壓縮的響應的最小長度,請使用gzip_min_length指令。 預設值為20位元組(可將此處調整為1000):

gzip_min_length 1000;

預設情況下,NGINX不會壓縮對代理請求的響應(來自代理伺服器的請求)。 請求來自代理伺服器的事實由請求中Via頭欄位的存在確定。 要組態這些響應的壓縮,請使用gzip_proxied指令。 該指令具有多個引數,指定NGINX應壓縮哪種代理請求。例如,僅對不會在代理伺服器上快取的請求壓縮響應是合理的。 為此,gzip_proxied指令具有指示NGINX在響應中檢查Cache-Control頭欄位的引數,如果值為no-cache, no-storeprivate,則壓縮響應。 另外,您必須包括 Expires 引數以用來檢查Expires頭域的值。 這些引數在以下範例中與auth引數一起設定,該引數檢查Authorization頭欄位的存在(授權響應特定於終端使用者,並且通常不被快取):

gzip_proxied no-cache no-store private expired auth;

與大多數其他指令一樣,組態壓縮的指令可以包含在http上下文中,也可以包含在 serverlocation 組態塊中。

gzip壓縮的整體組態可能如下所示。

server {
    gzip on;
    gzip_types      text/plain application/xml;
    gzip_proxied    no-cache no-store private expired auth;
    gzip_min_length 1000;
    ...
}

3. 啟用解壓縮

某些用戶端不支援使用gzip編碼方法的響應。 同時,可能需要儲存壓縮資料,或者即時壓縮響應並將它們儲存在快取中。 為了成功地服務於不接受壓縮資料的用戶端,NGINX可以在將資料傳送到後一種型別的用戶端時即時解壓縮資料。

要啟用執行時解壓縮,請使用gunzip指令。

location /storage/ {
    gunzip on;
    ...
}

gunzip指令可以在與gzip指令相同的上下文中指定:

server {
    gzip on;
    gzip_min_length 1000;
    gunzip on;
    ...
}

請注意,此指令在單獨的模組中定義,預設情況下可能不包含在開源NGINX構建中。

4. 傳送壓縮檔案

要將檔案的壓縮版本傳送到用戶端而不是常規檔案,請在適當的上下文中將gzip_static指令設定為on

location / {
    gzip_static on;
}

在這種情況下,為了服務/path/to/file的請求,NGINX嘗試查詢並行送檔案/path/to/file.gz。 如果檔案不存在,或用戶端不支援gzip,則NGINX將傳送未壓縮版本的檔案。

請注意,gzip_static指令不啟用即時壓縮。它只是使用壓縮工具預先壓縮的檔案。要在執行時即時壓縮內容(而不僅僅是靜態內容),請使用gzip指令。

該指令在單獨的模組中定義,預設情況下可能不包含在開源NGINX構建中。