Nginx壓縮和解壓
本節介紹如何配置響應的壓縮或解壓縮以及發送壓縮文件。
在這篇文章中,涉及內容如下 -
- 壓縮和解壓縮介紹
- 啓用壓縮
- 啓用解壓縮
- 發送壓縮文件
1. 壓縮和解壓縮介紹
壓縮響應通常會顯着減少傳輸數據的大小。 然而,由於壓縮在運行時發生,它還可以增加相當大的處理開銷,這會對性能產生負面影響 在向客戶端發送響應之前,NGINX會執行壓縮,但不會「壓縮」已壓縮的響應(例如,由代理的服務器)。
2. 啓用壓縮
要啓用壓縮,請使用包含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;
...
}
3. 啓用解壓縮
某些客戶端不支持使用gzip
編碼方法的響應。 同時,可能需要存儲壓縮數據,或者即時壓縮響應並將它們存儲在緩存中。 爲了成功地服務於不接受壓縮數據的客戶端,NGINX可以在將數據發送到後一種類型的客戶端時即時解壓縮數據。
要啓用運行時解壓縮,請使用gunzip
指令。
location /storage/ {
gunzip on;
...
}
gunzip
指令可以在與gzip
指令相同的上下文中指定:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
請注意,此指令在單獨的模塊中定義,默認情況下可能不包含在開源NGINX構建中。
4. 發送壓縮文件
要將文件的壓縮版本發送到客戶端而不是常規文件,請在適當的上下文中將gzip_static
指令設置爲on
。
location / {
gzip_static on;
}
在這種情況下,爲了服務/path/to/file
的請求,NGINX嘗試查找併發送文件/path/to/file.gz
。 如果文件不存在,或客戶端不支持gzip
,則NGINX將發送未壓縮版本的文件。
請注意,gzip_static
指令不啓用即時壓縮。它只是使用壓縮工具預先壓縮的文件。要在運行時即時壓縮內容(而不僅僅是靜態內容),請使用gzip
指令。
該指令在單獨的模塊中定義,默認情況下可能不包含在開源NGINX構建中。