Nginx 基本功能
1. 概述
通過壓縮響應資料,可以減少傳輸資料的大小。但是,由於壓縮發生在請求的處理過程中,會增加相當大的處理開銷,增大延時,對效能產生負面影響。Nginx 會在資料傳送到客戶端之前進行壓縮,但是對於已經壓縮過的資料不會進行二次壓縮(比如代理伺服器壓縮過一次了)。
2. 開啟壓縮功能
gzip
指令開啟壓縮功能:
gzip on;
Nginx 預設只壓縮 MIME 型別為 text/html 的響應。需要通過 gzip_types
指令新增要壓縮的其他型別的響應。
gzip_types text/plain application/xml;
gzip_min_length
gzip_min_length 1000;
預設情況下,Nginx 不壓縮要轉發給被代理伺服器的請求。通過請求頭中是否出現 Via 欄位來判斷這個請求是否來自代理伺服器。gzip_proxied
指令可以配置壓縮這些響應。
gzip_proxied
指令有多個引數可以指定 Nginx 要壓縮哪些代理請求。例如,壓縮不會在代理伺服器上快取的那些請求對應的響應。為此,gzip_proxied 指令的引數指示 Nginx 檢查響應中的 Cache-Control 頭欄位,並在該值為 no-cache,no-store 或 private 時壓縮響應。另外,必須包含 expired 引數以檢查 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 可以在將資料傳送到不支援 gzip 的客戶端時實時解壓縮資料。
gunzip
指令可以開啟實時解壓縮:
location /storage/ {
gunzip on;
...
}
gunzip 指令可以和 gzip 指令出現在同一個上下文中:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
注意,gunzip 指令定義在一個獨立的模組中,原始碼編譯安裝 Nginx 可能預設不包含這個模組。
4. 傳送壓縮過的檔案
在合適的上下文中設定 gzip_static
可以傳送檔案的壓縮版本到客戶端。
location / {
gzip_static on;
}
上面例子中,如果請求 /path/to/file,Nginx 會尋找對應檔案的壓縮過的版本(/path/to/file.gz)併發送。如果壓縮版本不存在,或客戶端不支援 gzip,Nginx 會尋找併發送非壓縮版本的檔案。
注意,gzip_static 指令不支援實時壓縮。這個指令只是使用之前用任何壓縮工具壓縮過的檔案。如果要實時壓縮內容(不只是靜態內容),必須使用 gzip 指令。
注意,gzip_static 指令定義在一個獨立的模組中,原始碼編譯安裝 Nginx 可能預設不包含這個模組。