1. 程式人生 > >Nginx 功能模塊3 - 壓縮模塊

Nginx 功能模塊3 - 壓縮模塊

網頁 vat 方法 flat module 默認值 odi 請求協議 3.5

1. 前言

  在 Nginx 中與網頁壓縮相關的模塊有兩個:一個是 HttpGzipModule,另一個是 HttpGzipStaticModule。前者用於啟用在文件傳輸過程中使用 gzip 壓縮,而後者的作用是將一個文件以壓縮的方式傳遞到一個支持壓縮功能的客戶端之前,首先檢查是否已經存在相應的以 ‘.gz‘ 結尾的文件名格式,這樣可以避免重復壓縮而造成資源浪費.

  因此,對於 Nginx 的網頁壓縮傳輸在 Nginx 中的配置將其分為兩種模式:一種是動態的, 實時壓縮輸出(邊壓縮,邊輸出),而另一種則是靜態的, 找到同名文件的 .gz 格式文件就輸出。

2. HttpGzipModule

HttpGzipModule 用於在文件傳輸過程中啟用 gzip 壓縮,壓縮率通過變量 $gzip 來設定。

2.1 示例

技術分享圖片

2.2 指令

技術分享圖片
指令名稱:gzip
語法:gzip on | off
默認值:gzip off
使用環境:http、server、location
功能:啟動或禁止 gzip 壓縮功能。

指令名稱:gzip_buffers
語法:gzip_buffer number size
默認值:gzip_buffers 4 4k/8k
使用環境:http、server、location
功能:該指令用於指定存放被壓縮響應的緩沖的數量和大小。如果沒有設置大小,那麽一個緩沖的大小等於一個頁碼的大小,具體頁碼的大小依賴於所在的系統平臺,不是 4KB 就是8KB。
獲取系統內存頁碼大小的方法很簡單:
[root@
10.0.10.158 ~]#getconf PAGE_SIZE 4096 指令名稱:gzip_comp_level 語法:gzip_comp_level 19 默認值:gzip_comp_level 1 使用環境:http、server、location 功能:該指令用於設定壓縮級別,可以設定的級別從 1 - 91 是最小的壓縮率,也是最快的,占用CPU資源最少;而9是壓縮率最高的,也是最慢的,占用cpu資源最大。 指令名稱:gzip_disable 語法:gzip_disable regex 使用環境:http、server、location 功能:可以通過該指令對一些特定的用戶代理不使用壓縮功能,就可以使用正則表達式,但這需要PCRE的支持。該指令從0.
6.23以後才開始提供。從 Nginx 0.7.63版本後,可以使用"msie6" 來禁止對 IE5.5 和 IE 6 的壓縮。 指令名稱:gzip_http_version 語法:gzip_http_version 1.0 | 1.1 默認值:gzip_http_version 1.1 使用環境:http、server、location 功能:該指令用於決定對指定的 HTTP 請求協議版本進行壓縮或者不壓縮,其依賴於客戶端的HTTP請求版本。 指令名稱:gzip_min_length 語法:gzip_min_length length 默認值:gzip_min_length 0 使用環境:http、server、location 功能:該指令用於設置響應體的最小長度,單位為字節。如果響應體的長度低於指定的值,那麽就不使用壓縮。長度的決定從 Content-Length 頭獲取。 指令名稱:gzip_proxied 語法:gzip_proxied [ off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ] 默認值:gzip_proxied off 使用環境:http、server、location 功能:該指令用於設置啟用或禁止從代理服務器上收到的響應體 Gzip 壓縮功能。 指令名稱:gzip_types 語法:gzip_types mime-type [ mime-type… ] 默認值:gzip_types text/html; 使用環境:http, server, location 功能:該指令用於設定除了默認的 text/html MIME 類型外,對其他的那些 MIME 類型也啟用壓縮功能。 指令名稱:gzip_vary 語法:gzip_vary on | off 默認值: gzip_vary off 使用環境:http、server、location 功能:該指令用於設定是否向響應數據包添加 Vary: Accept-Encoding HTTP 頭(header)。
gzip 指令部分

gzip 指令是挺多的,一般常用的如下:

技術分享圖片

技術分享圖片
    gzip  on;   # ¿ªÆôѹËõ
    gzip_disable "msie6";       # IE ½ûֹѹËõ
    gzip_proxied any;   # ÈκÎÎļþ¶¼Ñ¹Ëõ
    gzip_comp_level 4;  # ѹËõµÈ¼¶
    gzip_vary on;       # ͨ¹ý¿Í»§¶ËÅжÏѹËõ
    gzip_min_length 1k; # ѹËõµÄ×îСÈÝÁ¿
    # ѹËõ¸ñʽ£¬¸ù¾ÝÐèÇóµ÷Õû
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip 常用指令

2.3 測試

生成一個較大的頁面

技術分享圖片

瀏覽器直接訪問

技術分享圖片

查看有沒有開啟gzip壓縮功能

curl -I -H "Accept-Encoding: gzip,deflate" http://10.0.10.158/hello.html

技術分享圖片

3. HttpGzipStaticModule

gzip_static 生效的前提是 nginx 開啟了 gzip_static壓縮並且請求目錄下存在名稱相同且以 .gz 結尾的文件。
使用 gzip_static 壓縮的話要先準備好壓縮後的 gz 文件,並且服務器會消耗更多的空間來存儲壓縮文件和原文件,這個有利有弊要自己衡量。

3.1 指令

gzip_static
語法:gzip_static on | off
默認值:gzip_static off
使用環境:http、server、location
功能:用於啟用 HttpGzipStaticModule

3.2 測試

技術分享圖片

通過訪問,系統會去讀頁面文件,文件的最新訪問時間會被修改。所以通過文件的訪問時間可以確定是哪個文件被訪問了。
技術分享圖片

接下來,通過瀏覽器訪問:

技術分享圖片

再次查看 hello.html* 最新訪問時間:

技術分享圖片

通過對比,本次瀏覽器訪問的是 hello.html.gz 文件,文件大小為: 244K,通過瀏覽器訪問:243.55KB。

4. 總結

gzip 和 gzip_static 模塊的區別就是:gzip是動態壓縮,壓縮過程中會消耗一定的資源,gzip_static 是需要提前將頁面轉換為.gz格式的文件,需要額外的空間來存儲。它們的壓縮比例和傳輸大小都是通過相同的參數設定的。
可以這麽說:

  gzip 是通過計算換空間,gzip_static 是通過空間換計算。

Nginx 功能模塊3 - 壓縮模塊