在nginx中與網頁壓縮相關的模塊有兩個:HttpGzipModule和HttpGzipStaticModule。前者用於啓用在文件傳輸過程中使用gzip壓縮,而後者的作用是將一個文件以壓縮的方式傳遞到一個支持壓縮功能的客戶端之前,首先檢查是否已經存在相應的*.gz結尾的文件名格式,這樣避免重複壓縮而造成資源浪費。
對於nginx的網頁壓縮傳輸在nginx中的配置是將其分到兩種模式:一種是動態的,實時壓縮輸出(邊壓縮邊輸出),另一種是靜態的,找到同名文件的.gz格式文件就輸出。
啓用gzip功能需要引用zlib庫
一、HttpGzipModule
HttpGzipModule 用於在文件傳輸過程中啓用gzip壓縮,壓縮率通過變量$gzip-ratio來設定。
1、配置示例
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_type text/plain application/xml;
gzip_disable "MSIE [1-6]\.";
2、指令
HttpGzipModule提供了以下兩條指令。
指令名稱: gzip
語法:gzip on|off
使用環境:http,server,location,location中的if區段
功能:啓用或者禁用gzip壓縮功能。
指令名稱:gzip_buffers
默認值:gzip_buffers 4 4k/8k
使用環境,http,server,location
功能:該指令用於指定存放被壓縮相應的緩衝的數量和大型。如果沒有設置大小,那麼一個緩衝的小寫等於一個頁碼的大小,具體頁碼的大小毅力阿玉所在系統平臺,不是4KB就是8KB。獲取系統內存頁碼的大小方法很簡單:
[root@mb_comp ~]# getconf PAGE_SIZE
4096
指令名稱:gzip_comp_level
語法:gzip_comp_level 1..9
默認值:gzip_comp_level 1
功能:該指令用於設定壓縮級別,可以設定的級別從1~9,1是最小的壓縮率,也是最快的。佔用CPU資源最少;9是最大壓縮率,也是最慢的,佔用CPU資源最大。
指令名稱:gzip_disable
語法:gzip_disable regex
使用環境:http,server,location
功能:可以通過該指令對一些特定的用戶代理不使用壓縮功能,就可以使用正則表達式,但這需要PCRE的支持。該指令從0.6.23以後纔開始提供。從nginx0.7.63版本後,可以使用“msie6”來進制對IE5.5 和IE6的壓縮,而“SV1”(Service Pack2)將會被忽略。
例如:gzip_disable "msie6";
指令名稱:gzip_http_version
語法:gzip_http_version 1.0|1.1
默認值:gzip_http_version 1.1
使用環境:http,server,location
功能:該指令用於決定對指定的HTTP請求協議版本進行壓縮或者不壓縮,其依賴於客戶端的HTTP請求的版本。當使用HTTP1.0協議是,Vary:Accept-Encoding頭沒有設置,這樣會導致代理緩衝腐化(corruption),因此可以考慮使用add_header指令來添加它。同時也要注意到,無論使用gzip的哪個版本,Content-Length頭都沒有設置。使用1.0版本是,Keepalive將會無效,而1.1版本將會有chunked傳遞處理。
注意:該指令的默認值1.1,但是在某些抓取訪問(例如CDN)中可能會有問題,因此根據需要可以將其改爲1.0
指令名稱:gzip_min_length
語法: gzip_min_length length
默認值:gzip_min_length 0
使用環境:http,server,location
功能:該指令用於設置響應體的最小長度,單位爲字節。如果響應體的長度低於指定的值,那麼就不使用壓縮。長度的決定從“Conten-Length”頭獲取。
指令名稱:gzip_proxied
語法:gzip_proxied [off|expire|no-cache|no-store|private|no_last_modified|no_etag|auth|any]…
默認值:gzip_proxied off
使用環境:http,server,location
功能: 該指令用於設置啓用或禁用從代理服務器上收到的響應體gzip壓縮功能。該指令接受下列參數,有些可以組合使用。
- off/any: 對所有的請求啓用/禁用壓縮功能。
- expired:如果Expires header阻止緩衝,那麼啓用壓縮。
- no-cache/no-store/private:如果Cache-Control header 被指使爲no-cache,no-store或者private,則啓用壓縮。
- no_last_modified:加入Last_Modified header沒有設置,則啓用壓縮
- no_etag:假如Etag header 沒有設置,則啓用壓縮
- auth: 假如設置了Authorization header,則啓用壓縮
指令名稱:gzip_types
語法:gzip_types mime-type [mime-type]
默認值: gzip_types text/html
使用環境:http,server,location
功能:該指令用於設定除了默認的text/html MIME類型外,對其他的那些MIME類型也啓用壓縮功能。(匹配mime類型進行壓縮,無論是否指定,”text/html”類型總是會被壓縮的)
指令名稱:gzip_vary
語法:gzip_vary on|off
默認值:gzip_vary off
使用環境:http,server,location
功能:該指令用於設定是否相應數據包添加Vary:Accept-Enconding HTTP頭(header)。
需要注意的而是,由於bug的原因,如果設置添加該頭,你們會導致IE4~6不緩存內容。
指令名稱:gzip_window
語法:gzip_window size (允許範圍 521 1k 2k 4k 8k 16k 32k)
默認值 :MAX_WBITS,來源於Zlib庫
使用環境:http,server,location
功能:該指令用於gzip操作的窗口(window)緩衝的大小(windowBits參數)。該指令所使用的值是由zlib庫調用的功能。
指令名稱:gzip_hash
語法:gzip_hash size
默認值:MAX_MEM_LEVEL ,來源於Zlib庫
使用環境:http,server,location
功能:該指令用於設置分配給內部壓縮狀態(memlevel參數)的內存總數。該指令所使用的值是有Zlib庫調用的功能。
指令名稱:postpone_gzipping
語法:postpone_gzipping size
默認值:0
使用環境:http,server,location
功能:在開始進行gzip壓縮前定義一個最小的數據門檻(threshold)
指令名稱:gzip_no_buffer
語法:gzip_no_buffer on|off
默認值:off
使用環境:http,server,location
功能:默認情況下,在將數據發送到客戶端之前nginx會等待,直到至少一個緩存(有gzip_buffers定義)被數據填滿。如果開啓該指令,那會禁用緩存。
二、HttpGzipStaticModule
Ngx_http_gzip_static_module 從Nginx.0.6.24版本開始提供,但是在默認安裝中它是不會被變音安裝的,在編譯時需要指定--with-http_gzip_static_module選項。
指令名稱:gzip_static
語法:gzip_static on|off
默認值:gzip_static off
使用環境:http,server,location
功能: 用於啓用HttpGzipStaticModule。需要注意的是,確定壓縮版本和非壓縮版本的時間戳要匹配,以便更新的內容。
轉自:http://blog.sina.com.cn/s/blog_594c47d00101dfz1.html