1. 程式人生 > >Nginx 基本功能

Nginx 基本功能

原文地址

1. 概述

通過壓縮響應資料,可以減少傳輸資料的大小。但是,由於壓縮發生在請求的處理過程中,會增加相當大的處理開銷,增大延時,對效能產生負面影響。Nginx 會在資料傳送到客戶端之前進行壓縮,但是對於已經壓縮過的資料不會進行二次壓縮(比如代理伺服器壓縮過一次了)。

2. 開啟壓縮功能

gzip 指令開啟壓縮功能:

gzip on;

Nginx 預設只壓縮 MIME 型別為 text/html 的響應。需要通過 gzip_types 指令新增要壓縮的其他型別的響應。

gzip_types text/plain application/xml;

gzip_min_length

指令指定要壓縮響應的最小長度,預設 20 位元組。下面例子中改為了 1000 位元組:

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 可能預設不包含這個模組。