本節(jié)介紹如何配置響應(yīng)的壓縮或解壓縮以及發(fā)送壓縮文件。
在這篇文章中,涉及內(nèi)容如下 -
壓縮響應(yīng)通常會(huì)顯著減少傳輸數(shù)據(jù)的大小。 然而,由于壓縮在運(yùn)行時(shí)發(fā)生,它還可以增加相當(dāng)大的處理開(kāi)銷,這會(huì)對(duì)性能產(chǎn)生負(fù)面影響 在向客戶端發(fā)送響應(yīng)之前,NGINX會(huì)執(zhí)行壓縮,但不會(huì)“壓縮”已壓縮的響應(yīng)(例如,由代理的服務(wù)器)。
要啟用壓縮,請(qǐng)使用包含gzip指令并指定on值。
gzip on;
默認(rèn)情況下,NGINX僅使用MIME類型text/html壓縮響應(yīng)。要使用其他MIME類型壓縮響應(yīng),請(qǐng)包含gzip_types指令并列出其他類型。
gzip_types text/plain application/xml;
要指定要壓縮的響應(yīng)的最小長(zhǎng)度,請(qǐng)使用gzip_min_length指令。 默認(rèn)值為20字節(jié)(可將此處調(diào)整為1000):
gzip_min_length 1000;
默認(rèn)情況下,NGINX不會(huì)壓縮對(duì)代理請(qǐng)求的響應(yīng)(來(lái)自代理服務(wù)器的請(qǐng)求)。 請(qǐng)求來(lái)自代理服務(wù)器的事實(shí)由請(qǐng)求中Via頭字段的存在確定。 要配置這些響應(yīng)的壓縮,請(qǐng)使用gzip_proxied指令。 該指令具有多個(gè)參數(shù),指定NGINX應(yīng)壓縮哪種代理請(qǐng)求。例如,僅對(duì)不會(huì)在代理服務(wù)器上緩存的請(qǐng)求壓縮響應(yīng)是合理的。 為此,gzip_proxied指令具有指示NGINX在響應(yīng)中檢查Cache-Control頭字段的參數(shù),如果值為no-cache, no-store 或 private,則壓縮響應(yīng)。 另外,您必須包括 Expires 參數(shù)以用來(lái)檢查Expires頭域的值。 這些參數(shù)在以下示例中與auth參數(shù)一起設(shè)置,該參數(shù)檢查Authorization頭字段的存在(授權(quán)響應(yīng)特定于最終用戶,并且通常不被緩存):
gzip_proxied no-cache no-store private expired auth;
與大多數(shù)其他指令一樣,配置壓縮的指令可以包含在http上下文中,也可以包含在 server 或 location 配置塊中。
gzip壓縮的整體配置可能如下所示。
server {
gzip on;
gzip_types text/plain application/xml;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
...
}
某些客戶端不支持使用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í)解壓縮,請(qǐng)使用gunzip指令。
location /storage/ {
gunzip on;
...
}
gunzip指令可以在與gzip指令相同的上下文中指定:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
請(qǐng)注意,此指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開(kāi)源NGINX構(gòu)建中。
要將文件的壓縮版本發(fā)送到客戶端而不是常規(guī)文件,請(qǐng)?jiān)谶m當(dāng)?shù)纳舷挛闹袑?code>gzip_static指令設(shè)置為on。
location / {
gzip_static on;
}
在這種情況下,為了服務(wù)/path/to/file的請(qǐng)求,NGINX嘗試查找并發(fā)送文件/path/to/file.gz。 如果文件不存在,或客戶端不支持gzip,則NGINX將發(fā)送未壓縮版本的文件。
請(qǐng)注意,gzip_static指令不啟用即時(shí)壓縮。它只是使用壓縮工具預(yù)先壓縮的文件。要在運(yùn)行時(shí)即時(shí)壓縮內(nèi)容(而不僅僅是靜態(tài)內(nèi)容),請(qǐng)使用gzip指令。
該指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開(kāi)源NGINX構(gòu)建中。