鍍金池/ 教程/ Linux/ Nginx壓縮和解壓
Nginx安裝
Nginx內(nèi)容緩存
Nginx架構(gòu)
Nginx進(jìn)程和運(yùn)行時(shí)控制
Nginx配置虛擬機(jī)
Nginx從源碼構(gòu)建安裝配置
為什么需要Nginx?
Nginx配置文件
Nginx壓縮和解壓
Nginx+PHP7+MySQL5.7(LNMP)環(huán)境配置
Nginx反向代理
Nginx+PHP7源碼安裝配置
Nginx快速入門
Nginx的優(yōu)勢(優(yōu)點(diǎn))
Nginx教程
Nginx特性
Nginx配置Web服務(wù)器
Nginx配置日志
Nginx配置靜態(tài)內(nèi)容服務(wù)器
Nginx主要應(yīng)用場景(必讀)
Nginx安裝(從Linx包安裝)

Nginx壓縮和解壓

本節(jié)介紹如何配置響應(yīng)的壓縮或解壓縮以及發(fā)送壓縮文件。

在這篇文章中,涉及內(nèi)容如下 -

  1. 壓縮和解壓縮介紹
  2. 啟用壓縮
  3. 啟用解壓縮
  4. 發(fā)送壓縮文件

1. 壓縮和解壓縮介紹

壓縮響應(yīng)通常會(huì)顯著減少傳輸數(shù)據(jù)的大小。 然而,由于壓縮在運(yùn)行時(shí)發(fā)生,它還可以增加相當(dāng)大的處理開銷,這會(huì)對性能產(chǎn)生負(fù)面影響 在向客戶端發(fā)送響應(yīng)之前,NGINX會(huì)執(zhí)行壓縮,但不會(huì)“壓縮”已壓縮的響應(yīng)(例如,由代理的服務(wù)器)。

2. 啟用壓縮

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

gzip on;

默認(rèn)情況下,NGINX僅使用MIME類型text/html壓縮響應(yīng)。要使用其他MIME類型壓縮響應(yīng),請包含gzip_types指令并列出其他類型。

gzip_types text/plain application/xml;

要指定要壓縮的響應(yīng)的最小長度,請使用gzip_min_length指令。 默認(rèn)值為20字節(jié)(可將此處調(diào)整為1000):

gzip_min_length 1000;

默認(rèn)情況下,NGINX不會(huì)壓縮對代理請求的響應(yīng)(來自代理服務(wù)器的請求)。 請求來自代理服務(wù)器的事實(shí)由請求中Via頭字段的存在確定。 要配置這些響應(yīng)的壓縮,請使用gzip_proxied指令。 該指令具有多個(gè)參數(shù),指定NGINX應(yīng)壓縮哪種代理請求。例如,僅對不會(huì)在代理服務(wù)器上緩存的請求壓縮響應(yīng)是合理的。 為此,gzip_proxied指令具有指示NGINX在響應(yīng)中檢查Cache-Control頭字段的參數(shù),如果值為no-cache, no-storeprivate,則壓縮響應(yīng)。 另外,您必須包括 Expires 參數(shù)以用來檢查Expires頭域的值。 這些參數(shù)在以下示例中與auth參數(shù)一起設(shè)置,該參數(shù)檢查Authorization頭字段的存在(授權(quán)響應(yīng)特定于最終用戶,并且通常不被緩存):

gzip_proxied no-cache no-store private expired auth;

與大多數(shù)其他指令一樣,配置壓縮的指令可以包含在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編碼方法的響應(yīng)。 同時(shí),可能需要存儲(chǔ)壓縮數(shù)據(jù),或者即時(shí)壓縮響應(yīng)并將它們存儲(chǔ)在緩存中。 為了成功地服務(wù)于不接受壓縮數(shù)據(jù)的客戶端,NGINX可以在將數(shù)據(jù)發(fā)送到后一種類型的客戶端時(shí)即時(shí)解壓縮數(shù)據(jù)。

要啟用運(yùn)行時(shí)解壓縮,請使用gunzip指令。

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

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

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

請注意,此指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開源NGINX構(gòu)建中。

4. 發(fā)送壓縮文件

要將文件的壓縮版本發(fā)送到客戶端而不是常規(guī)文件,請?jiān)谶m當(dāng)?shù)纳舷挛闹袑?code>gzip_static指令設(shè)置為on。

location / {
    gzip_static on;
}

在這種情況下,為了服務(wù)/path/to/file的請求,NGINX嘗試查找并發(fā)送文件/path/to/file.gz。 如果文件不存在,或客戶端不支持gzip,則NGINX將發(fā)送未壓縮版本的文件。

請注意,gzip_static指令不啟用即時(shí)壓縮。它只是使用壓縮工具預(yù)先壓縮的文件。要在運(yùn)行時(shí)即時(shí)壓縮內(nèi)容(而不僅僅是靜態(tài)內(nèi)容),請使用gzip指令。

該指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開源NGINX構(gòu)建中。