1.簡介
壓縮響應可以減少傳輸數據的大小,節省帶寬。但過多的壓縮會造成很大的處理開銷。在發送給客戶端之前,nginx會對響應做壓縮,但是如果后端服務器已經
壓縮過了,nginx就不再壓縮。
2.開啟壓縮
server { gzip on; gzip_types text/plain application/xml; gzip_proxied no-cache no-store private expired auth; gzip_min_length 1000; ... }
nginx默認只壓縮MIME類型為text/plain的響應,使用gzip_types指定額外的壓縮類型。
gzip_min_length:nginx會檢查響應頭中的Content-length,如果大於1000字節,就壓縮,如果小於1000字節,就不壓縮。
gzip_proxied:假如用戶與nginx之間隔了一層代理服務器(用戶的代理服務器),代理服務器發送請求到nginx,nginx將請求轉發給后端服務器,后端服務器接收到響應后,不對響應做壓縮,直接返回給代理服務器。通過gzip_proxied指令來配置如何對這種響應做壓縮。
用戶-----代理服務器----------nginx-----后端服務器
我們是根據請求中的Via頭字段知道這個請求是來自代理服務器的。
gzip_proxied有多個參數,用於聲明哪些類型的請求對應的響應需要壓縮。
上面的例子中表示:
如果響應中的Cache-Control字段的值為:no-cache,no-store,private,就壓縮這個響應,因為它不會緩存在用戶的代理服務器上。
expired參數表示nginx會去檢查響應中的Expired頭字段。
auth參數表示nginx會去檢查響應中的Authorization頭字段。一個經過授權的響應是不能在代理服務器上緩存的,必須給終端用戶。
配置壓縮的指令可以寫在http塊中,可以寫在server塊中,可以寫在location塊中。
3.開啟解壓縮
由於有的客戶端可以識別壓縮的響應,有的客戶端無法識別壓縮的響應,所以就需要分別對待。
開啟運行時解壓縮,也就是在傳輸前進行壓縮,在發送的過程中進行解壓縮?
location /storage/ { gunzip on; ... }
注意:解壓縮指令在預編譯的開源的nginx中沒有,它屬於一個單獨的模塊,需要編譯到nginx中去。
4.盡量發送壓縮過的靜態文件
location / {
gzip_static on;
}
對於請求/path/to/file,nginx會嘗試先尋找/path/to/file.gz,找到后就發送出去,如果沒有找到,或者客戶端不支持gzip,那么就只能發送
/path/to/file了。
gzip_static的意思是提前壓縮好靜態文件。
注意:解壓縮指令在預編譯的開源的nginx中沒有,它屬於一個單獨的模塊,需要編譯到nginx中去。