隨着網站內容不斷增加,我們的網站上的內容和功能也變得豐富多彩,這時就會有一個問題出現----我們的網站加載會明顯變慢,這對於網站的訪客來說可不是一件愉快的事,那麼我們該如何優化網站,加快網站的訪問速度呢?減少網站的文件內容是不可能了,但我們可以用一種“魔法”把這些文件變小,下面我們便來認識一下這個奇妙的縮小術-----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;
指令含義:
gzip指令:
語法:gzip on|off
默認值:gzip off
指令用於開啓或關閉gzip模塊。
gzip_buffers指令:
語法:gzip_buffers number size
默認值:gzip_buffer 4 4k/8k
設置系統獲取幾個單位的緩存用戶存儲gzip的壓縮結果數據流。例如4 4k代表以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。4 8k代表以8k爲單位,按照原始數據以8k爲單位的4倍申請內存。
如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。
gzip_comp_level指令
語法:gzip_comp_level [1-9]
默認值:gzip_comp_level 1
gzip壓縮比,1:壓縮比最小,處理速度最快,9:壓縮比最大但處理速度最慢(傳輸快但更消耗CPU)。一般設置爲3即可。
gzip_min_length指令
語法:gzip_min_length length
默認值:gzip+min_length 0
設置允許壓縮的頁面最小字節數,頁面字節數從header頭的Content-Length中進行獲取。默認值是0,不管頁面多大都壓縮。建議設置成大於1k的字節數,小於1k的可能越壓越大。即:gzip_min_length 1024。
gzip_http_version指令
語法:gzip_http_version 1.0|1.1
默認值:gzip_http_version 1.1
識別http的協議版本。由於早期的一些瀏覽器或http客戶端,肯能不支持gzip自解壓,用戶會看到亂碼,所以做一些判斷還是有必要的。
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——無條件啓用壓縮。
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;
……
}
gzip_vary on指令
和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮
參考文獻:《實戰Nginx》