本節介紹如何組態響應的壓縮或解壓縮以及傳送壓縮檔案。
在這篇文章中,涉及內容如下 -
壓縮響應通常會顯著減少傳輸資料的大小。 然而,由於壓縮在執行時發生,它還可以增加相當大的處理開銷,這會對效能產生負面影響 在向用戶端傳送響應之前,NGINX會執行壓縮,但不會「壓縮」已壓縮的響應(例如,由代理的伺服器)。
要啟用壓縮,請使用包含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-store
或 private
,則壓縮響應。 另外,您必須包括 Expires
引數以用來檢查Expires
頭域的值。 這些引數在以下範例中與auth
引數一起設定,該引數檢查Authorization
頭欄位的存在(授權響應特定於終端使用者,並且通常不被快取):
gzip_proxied no-cache no-store private expired auth;
與大多數其他指令一樣,組態壓縮的指令可以包含在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
編碼方法的響應。 同時,可能需要儲存壓縮資料,或者即時壓縮響應並將它們儲存在快取中。 為了成功地服務於不接受壓縮資料的用戶端,NGINX可以在將資料傳送到後一種型別的用戶端時即時解壓縮資料。
要啟用執行時解壓縮,請使用gunzip
指令。
location /storage/ {
gunzip on;
...
}
gunzip
指令可以在與gzip
指令相同的上下文中指定:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
請注意,此指令在單獨的模組中定義,預設情況下可能不包含在開源NGINX構建中。
要將檔案的壓縮版本傳送到用戶端而不是常規檔案,請在適當的上下文中將gzip_static
指令設定為on
。
location / {
gzip_static on;
}
在這種情況下,為了服務/path/to/file
的請求,NGINX嘗試查詢並行送檔案/path/to/file.gz
。 如果檔案不存在,或用戶端不支援gzip
,則NGINX將傳送未壓縮版本的檔案。
請注意,gzip_static
指令不啟用即時壓縮。它只是使用壓縮工具預先壓縮的檔案。要在執行時即時壓縮內容(而不僅僅是靜態內容),請使用gzip
指令。
該指令在單獨的模組中定義,預設情況下可能不包含在開源NGINX構建中。