HttpGzipStaticModule Nginx壓縮傳輸

nginx_web發表於2012-07-01

 

 

    在從磁碟向支援gzip的客戶端提供一個檔案時,這個模組將會在同樣的目錄(或者叫位置)中查詢同請求檔名相同的、以".gz"格式結尾的檔案,這個檔案被稱為檔案的“預壓縮格式”,之所以稱為“預壓縮格式”,是因為Nginx不會去對該檔案進行壓縮,即使是該檔案被訪問之後也不會產生".gz"格式的檔案,因此需要我們自己壓縮。那麼這種機制的作用是什麼呢?很簡單,這麼做的原因在於避免每次請求都將對同一個檔案進行壓縮。

 

ngx_http_gzip_static_modulenginx 0.6.24版本開始提供,但是在預設安裝中它是不會被編譯安裝,因此,在編譯時需要指定--with-http_gzip_static_module選項。

 

配置示例

 

gzip_static on;

gzip_http_version   1.1;

gzip_proxied        expired no-cache no-store private auth;

gzip_disable        "MSIE [1-6]\.";

gzip_vary           on;

   

 

   

 

 

指令名稱:gzip_static

    能:啟用該模組。需要注意的是,確定壓縮版本和非壓縮版本的時間戳要匹配,以便提供最新的內容。

    : gzip_static on|off

默 認 值: gzip_static off

使用環境: http, server, location

 

以下命令參考NginxHttpGzipModule模組:

 

指令名稱:gzip_http_version

指令名稱:gzip_proxied

指令名稱:gzip_disable

指令名稱:gzip_vary

 

 

使用例項

 

    在下面的例子中我們先為現有的網頁index.html生成一個".gz"格式的檔案,即index.html.gz,然後測試訪問;在對index.html檔案進行修改,然後再訪問測試。

 

新增配置

 

  gzip             on;

  gzip_types       text/plain application/xml;

  gzip_static on;

   

 

訪問測試

 

    生成index.html檔案的另一個格式index.html.gz

 

[root@mfsmaster html]# ls

index.html

[root@mfsmaster html]#cat index.html

Welcome to nginx!

Welcome to nginx!

哈哈!!!

[root@mfsmaster html]# gzip -c index.html  > index.html.gz

[root@mfsmaster html]# ls

index.html  index.html.gz

   

    確定檔案的訪問時間:

 

[root@mfsmaster html]# stat index.*

  File: ‘index.html’

  Size: 167             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394667     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 16:45:20.339995192 +0800

Modify: 2011-08-18 16:44:16.746662848 +0800

Change: 2011-08-18 16:44:16.746662848 +0800

  File: ‘index.html.gz’

  Size: 151             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394635     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 16:45:20.338995344 +0800

Modify: 2011-08-18 16:45:20.339995192 +0800

Change: 2011-08-18 16:45:20.339995192 +0800

   

    訪問該檔案:

 

   

 

檢視檔案的訪問時間

 

[root@mfsmaster html]# stat index.*

  File: ‘index.html’

  Size: 167             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394667     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 16:45:20.339995192 +0800

Modify: 2011-08-18 16:44:16.746662848 +0800

Change: 2011-08-18 16:44:16.746662848 +0800

  File: ‘index.html.gz’

  Size: 151             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394635     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 16:59:01.040229792 +0800

Modify: 2011-08-18 16:45:20.339995192 +0800

Change: 2011-08-18 16:45:20.339995192 +0800

   

    我們比較以下這兩個檔案的訪問時間戳,肯定的說,我們的訪問是有‘index.html.gz’檔案提供的。

 

    下面將對index.html檔案進行修改:

 

[root@mfsmaster html]# vi index.html

 

Welcome to nginx!

Welcome to nginx!

哈哈!!!哈哈!!!

   

    檢視檔案的訪問時間

   

[root@mfsmaster html]# stat index.*

  File: ‘index.html’

  Size: 183             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394671     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 18:02:40.022656216 +0800

Modify: 2011-08-18 18:02:40.022656216 +0800

Change: 2011-08-18 18:02:40.023656064 +0800

  File: ‘index.html.gz’

  Size: 151             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394635     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 16:59:01.040229792 +0800

Modify: 2011-08-18 16:45:20.339995192 +0800

Change: 2011-08-18 16:45:20.339995192 +0800

 

    再次訪問該網頁:

 

    得到的頁面和原來的一樣,我們再次檢視檔案的訪問時間戳(如果你也是在做測試,那麼你需要將IE瀏覽器的快取清除)

 

[root@mfsmaster html]# stat index.*

  File: ‘index.html’

  Size: 183             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394671     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 18:02:40.022656216 +0800

Modify: 2011-08-18 18:02:40.022656216 +0800

Change: 2011-08-18 18:02:40.023656064 +0800

  File: ‘index.html.gz’

  Size: 151             Blocks: 8          IO Block: 4096   一般檔案

Device: fd00h/64768d    Inode: 5394635     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2011-08-18 18:09:11.569132104 +0800

Modify: 2011-08-18 16:45:20.339995192 +0800

Change: 2011-08-18 16:45:20.339995192 +0800

   

    相信你一定看清楚了,是由檔案‘index.html.gz’來提供訪問的,Nginx並沒有提供最新時間的‘index.html’檔案。你要還不信,那就將檔案‘index.html.gz’刪除再訪問,網頁絕對是最新版本,在此就不再舉例了。

 

    我們看一下,以下訪問情況:

 

[root@mfsmaster html]# ll

總用量 52

-rw-r--r--  1 root root   152  8 18 19:07 index.html

-rw-r--r--  1 root root   151  8 18 16:45 index.html.gz.old

-rw-r--r--  1 root root 12376  8 19 08:22 xx.html

-rw-r--r--  1 root root  4032  8 19 12:12 xx.html.gz

   

    在這裡為了說明訪問情況,我們訪問http://www.xx.com/xx.html,頁面就不再擷取了,看捕獲包的情況:

 

   

 

    看一下圖中被圈起的部分,下面是傳輸的資料包:

 

   

 

       位元組數:1260*3+252=4032,絕對訪問的是xx.html.gz頁面!

 

    說了這麼多,其實我們要明白的是壓縮傳輸的好處,絕對的節省頻寬,我們再算一下,看下面的算式:

 

    (12376-4032)/12376=67.42%

    (12376-4324)/12376=65.06%

 

    因此,我們得出的結論是:頁面壓縮傳輸後節省了大約60%的頻寬

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27043155/viewspace-734232/,如需轉載,請註明出處,否則將追究法律責任。

相關文章