Nginx壓縮輸出配置

   隨着網站內容不斷增加,我們的網站上的內容和功能也變得豐富多彩,這時就會有一個問題出現----我們的網站加載會明顯變慢,這對於網站的訪客來說可不是一件愉快的事,那麼我們該如何優化網站,加快網站的訪問速度呢?減少網站的文件內容是不可能了,但我們可以用一種“魔法”把這些文件變小,下面我們便來認識一下這個奇妙的縮小術-----gzip。

   gzip(GNU-ZIP)是一種壓縮技術,經過它的壓縮,頁面大小會縮小到一種可觀的比例,它的原理就是在服務器端進行壓縮,當壓縮後的數據包到達用戶端的瀏覽器時,會進行解壓,還原出原來的內容,壓縮過程,用戶在訪問網站時並不會感覺到。所以gzip的壓縮需要瀏覽器和服務器雙方面的支持。不過不需要我們擔心,因爲IE、火狐、Opera、谷歌等絕大多數瀏覽器都支持解析gzip過的頁面。

   Nginx的壓縮輸出由一組gzip壓縮指令來實現。gzip壓縮輸出的相關指令位於http{......}兩個大括號之間:

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml;

   指令含義:

  1. gzip指令:

    語法:gzip on|off

    默認值:gzip off

    指令用於開啓或關閉gzip模塊。

  2. gzip_buffers指令:

    語法:gzip_buffers number size

    默認值:gzip_buffer 4 4k/8k

    設置系統獲取幾個單位的緩存用戶存儲gzip的壓縮結果數據流。例如4 4k代表以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。4 8k代表以8k爲單位,按照原始數據以8k爲單位的4倍申請內存。

    如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。

  3. gzip_comp_level指令

    語法:gzip_comp_level [1-9]

    默認值:gzip_comp_level 1

    gzip壓縮比,1:壓縮比最小,處理速度最快,9:壓縮比最大但處理速度最慢(傳輸快但更消耗CPU)。一般設置爲3即可。

  4. gzip_min_length指令

    語法:gzip_min_length length

    默認值:gzip+min_length 0

    設置允許壓縮的頁面最小字節數,頁面字節數從header頭的Content-Length中進行獲取。默認值是0,不管頁面多大都壓縮。建議設置成大於1k的字節數,小於1k的可能越壓越大。即:gzip_min_length 1024。

  5. gzip_http_version指令

    語法:gzip_http_version 1.0|1.1

    默認值:gzip_http_version 1.1

    識別http的協議版本。由於早期的一些瀏覽器或http客戶端,肯能不支持gzip自解壓,用戶會看到亂碼,所以做一些判斷還是有必要的。

  6. gzip_proxied指令

    語法:gzip_proxied[off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any…]

    默認值:gzip_proxied off

    Nginx作爲反向代理的時候使用,開啓或關閉後端服務器返回的結果,匹配的前提是後端服務器必須要返回包含"Via"的header頭。

    off——關閉所有的代理結果數據的壓縮。

    experied——啓用壓縮,如果header頭中包含“Expires”頭信息。

    no_cache——啓用壓縮,如果header頭中包含“Cache-Control:no-cache”頭信息。

    no-store——啓用壓縮,如果header頭中包含“Cache-Control:no-store”頭信息。

    private——啓用壓縮,如果header頭中包含“Cache-Control:private”頭信息。

    no_last_modified——啓用壓縮,如果header頭中不包含“Last-Modified”頭信息。

    no_etag——啓用壓縮,如果header頭中不包含“ETag”頭信息。

    auth——啓用壓縮,如果header頭中包含“Authorization”頭信息。

    any——無條件啓用壓縮。

  7. gzip_types指令

    語法:gzip_types mime-type[mime-type…]

    默認值:gzip_types text/html

    匹配mime類型進行壓縮,(無論是否指定)“text/html”類型總是會被壓縮的。

    注意:如果作爲http server來使用,祝配置文件中要包含文件類型配置文件

    http

    {

      include  conf/mime.types;

      ……

    }

    如果你希望壓縮常規的文件類型,可以把代碼寫成這樣:

    http

    {

      include conf/mime.types;

      gzip on;

      gzip_mim_length 1000;

      gzip_buffers  4 8k;

      gzip_http_version 1.1;

      gzip_types  text/plain application/x-javascript text/css text/html application/xml;

      ……

    }

  8. gzip_vary on指令

    和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮

參考文獻:《實戰Nginx》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章