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構建中。