壓縮過程減少了傳輸數(shù)據(jù)的大小。然而,由于壓縮發(fā)生在運(yùn)行時(shí),它也可能包括相當(dāng)大的處理開銷,這會對性能產(chǎn)生負(fù)面影響。Nginx 在向客戶端發(fā)送響應(yīng)之前執(zhí)行壓縮,但不會對已經(jīng)壓縮的響應(yīng)進(jìn)行雙重壓縮。
要啟用壓縮,請?zhí)砑訋в?strong>on參數(shù)的 gzip 指令:
gzip on;
默認(rèn)情況下,Nginx 僅使用 text/html(MIME 類型)壓縮響應(yīng)。要使用其他 MIME 類型壓縮響應(yīng),請?zhí)砑?gzip_types 指令并列出其他類型。
gzip_types text/plain application/xml;
我們可以定義要壓縮的響應(yīng)的最小長度,使用 gzip_min_length 指令。默認(rèn)值為 20 字節(jié)。
gzip_min_length 1000;
某些客戶端不使用 gzip 編碼方法處理響應(yīng)。同時(shí),可能需要動態(tài)存儲壓縮數(shù)據(jù)或響應(yīng)并將它們存儲在緩存中。為了成功地為接受和不接受壓縮數(shù)據(jù)的客戶端提供服務(wù),NGINX 可以在將數(shù)據(jù)發(fā)送到后一種類型的客戶端時(shí)即時(shí)解壓縮數(shù)據(jù)。
要啟用運(yùn)行時(shí)解壓縮,請使用 gunzip 指令。
location /storage/ { gunzip on; ... }
gunzip 指令可以在與 gzip 指令相同的上下文中定義:
server { gzip on; gzip_min_length 1000; gunzip on; ... }
要將壓縮文件而不是常規(guī)文件發(fā)送到客戶端,請?jiān)谶m當(dāng)?shù)纳舷挛闹袑?gzip_static 指令設(shè)置為 on。
location / { gzip_static on; }
在上面的例子中,為了服務(wù)一個對 /p??ath/to/file 的請求,NGINX 試圖找到并發(fā)送文件/path/to/file.gz。如果文件不存在,或者客戶端不支持 gzip,NGINX 會發(fā)送未壓縮的文件。