本節(jié)介紹如何配置響應(yīng)的壓縮或解壓縮以及發(fā)送壓縮文件。
在這篇文章中,涉及內(nèi)容如下 -
壓縮響應(yīng)通常會顯著減少傳輸數(shù)據(jù)的大小。 然而,由于壓縮在運(yùn)行時發(fā)生,它還可以增加相當(dāng)大的處理開銷,這會對性能產(chǎn)生負(fù)面影響 在向客戶端發(fā)送響應(yīng)之前,NGINX會執(zhí)行壓縮,但不會“壓縮”已壓縮的響應(yīng)(例如,由代理的服務(wù)器)。
要啟用壓縮,請使用包含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不會壓縮對代理請求的響應(yīng)(來自代理服務(wù)器的請求)。 請求來自代理服務(wù)器的事實由請求中Via頭字段的存在確定。 要配置這些響應(yīng)的壓縮,請使用gzip_proxied指令。 該指令具有多個參數(shù),指定NGINX應(yīng)壓縮哪種代理請求。例如,僅對不會在代理服務(wù)器上緩存的請求壓縮響應(yīng)是合理的。 為此,gzip_proxied指令具有指示NGINX在響應(yīng)中檢查Cache-Control頭字段的參數(shù),如果值為no-cache, no-store 或 private,則壓縮響應(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上下文中,也可以包含在 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ù)據(jù),或者即時壓縮響應(yīng)并將它們存儲在緩存中。 為了成功地服務(wù)于不接受壓縮數(shù)據(jù)的客戶端,NGINX可以在將數(shù)據(jù)發(fā)送到后一種類型的客戶端時即時解壓縮數(shù)據(jù)。
要啟用運(yùn)行時解壓縮,請使用gunzip指令。
location /storage/ {
gunzip on;
...
}
gunzip指令可以在與gzip指令相同的上下文中指定:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
請注意,此指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開源NGINX構(gòu)建中。
要將文件的壓縮版本發(fā)送到客戶端而不是常規(guī)文件,請在適當(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指令不啟用即時壓縮。它只是使用壓縮工具預(yù)先壓縮的文件。要在運(yùn)行時即時壓縮內(nèi)容(而不僅僅是靜態(tài)內(nèi)容),請使用gzip指令。
該指令在單獨(dú)的模塊中定義,默認(rèn)情況下可能不包含在開源NGINX構(gòu)建中。