本節(jié)介紹如何配置響應(yīng)的壓縮或解壓縮以及發(fā)送壓縮文件。
在這篇文章中,涉及內(nèi)容如下 -
壓縮響應(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ù)器)。
要啟用壓縮,請使用包含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-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í),可能需要存儲(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)建中。
要將文件的壓縮版本發(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)建中。