做為如今性能最好一姿,使用最廣泛的web服務(wù)器nginx來(lái)說(shuō)汗盘。本身將具有g(shù)zip壓縮的功能
什么是GZIP
GZIP是若干文件壓縮程序的簡(jiǎn)稱兼耀,通常指GNU計(jì)劃的實(shí)現(xiàn)倦踢,此處的GZIP代表的就是GUN ZIP,這也是HTTP1.1協(xié)議定義的兩種壓縮方法中最常用的一種壓縮方法斋陪,客戶端瀏覽器大都支持這種壓縮格式。
在不設(shè)置服務(wù)器gzip的情況下置吓,我們?cè)L問(wèn)網(wǎng)站 无虚,
在設(shè)置服務(wù)器gzip之后。訪問(wèn)情況如下
經(jīng)過(guò)對(duì)比衍锚,我們發(fā)現(xiàn)友题,設(shè)置gzip之后,獲取同樣的數(shù)據(jù)戴质。壓縮之后的數(shù)據(jù)量大概是原始數(shù)據(jù)的1/4度宦。同樣的,獲取數(shù)據(jù)的時(shí)間也大大降低告匠。極大的優(yōu)化了用戶的體驗(yàn)戈抄。
設(shè)置 nginx GZIP
編輯nginx配置文件 nginx.conf 找到如下代碼并更改如下:
gzip on; 開(kāi)啟壓縮
gzip_min_length 1k; 設(shè)置壓縮最小單位,小于不壓縮
#gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
gzip_comp_level 4; 壓縮比
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 壓縮內(nèi)容
gzip on|off
默認(rèn)值: gzip off
開(kāi)啟或者關(guān)閉gzip模塊
gzip_static on|off
nginx對(duì)于靜態(tài)文件的處理模塊
該模塊可以讀取預(yù)先壓縮的gz文件后专,這樣可以減少每次請(qǐng)求進(jìn)行g(shù)zip壓縮的CPU資源消耗划鸽。該模塊啟用后,nginx首先檢查是否存在請(qǐng)求靜態(tài)文件的gz結(jié)尾的文件戚哎,如果有則直接返回該gz文件內(nèi)容裸诽。為了要兼容不支持gzip的瀏覽器,啟用gzip_static模塊就必須同時(shí)保留原始靜態(tài)文件和gz文件型凳。這樣的話丈冬,在有大量靜態(tài)文件的情況下,將會(huì)大大增加磁盤空間甘畅。我們可以利用nginx的反向代理功能實(shí)現(xiàn)只保留gz文件埂蕊。
gzip_comp_level 4
默認(rèn)值:1(建議選擇為4)
gzip壓縮比/壓縮級(jí)別实夹,壓縮級(jí)別 1-9,級(jí)別越高壓縮率越大粒梦,當(dāng)然壓縮時(shí)間也就越長(zhǎng)(傳輸快但比較消耗cpu)亮航。
gzip_buffers 4 16k
默認(rèn)值: gzip_buffers 4 4k/8k
設(shè)置系統(tǒng)獲取幾個(gè)單位的緩存用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流。 例如 4 4k 代表以4k為單位匀们,按照原始數(shù)據(jù)大小以4k為單位的4倍申請(qǐng)內(nèi)存缴淋。 4 8k 代表以8k為單位,按照原始數(shù)據(jù)大小以8k為單位的4倍申請(qǐng)內(nèi)存泄朴。
如果沒(méi)有設(shè)置重抖,默認(rèn)值是申請(qǐng)跟原始數(shù)據(jù)相同大小的內(nèi)存空間去存儲(chǔ)gzip壓縮結(jié)果。
gzip_types mime-type [mime-type ...]
默認(rèn)值: gzip_types text/html (默認(rèn)不對(duì)js/css文件進(jìn)行壓縮)
壓縮類型祖灰,匹配MIME類型進(jìn)行壓縮
不能用通配符 text/*
(無(wú)論是否指定)text/html默認(rèn)已經(jīng)壓縮
設(shè)置哪壓縮種文本文件可參考 conf/mime.types
gzip_min_length 1k
默認(rèn)值: 0 钟沛,不管頁(yè)面多大都?jí)嚎s
設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù),頁(yè)面字節(jié)數(shù)從header頭中的Content-Length中進(jìn)行獲取局扶。
建議設(shè)置成大于1k的字節(jié)數(shù)恨统,小于1k可能會(huì)越壓越大。 即: gzip_min_length 1024
gzip_http_version 1.0|1.1
默認(rèn)值: gzip_http_version 1.1(就是說(shuō)對(duì)HTTP/1.1協(xié)議的請(qǐng)求才會(huì)進(jìn)行g(shù)zip壓縮)
識(shí)別http的協(xié)議版本三妈。由于早期的一些瀏覽器或者h(yuǎn)ttp客戶端畜埋,可能不支持gzip自解壓,用戶就會(huì)看到亂碼畴蒲,所以做一些判斷還是有必要的悠鞍。
注:99.99%的瀏覽器基本上都支持gzip解壓了,所以可以不用設(shè)這個(gè)值,保持系統(tǒng)默認(rèn)即可模燥。
假設(shè)我們使用的是默認(rèn)值1.1咖祭,如果我們使用了proxy_pass進(jìn)行反向代理,那么nginx和后端的upstream server之間是用HTTP/1.0協(xié)議通信的蔫骂,如果我們使用nginx通過(guò)反向代理做Cache Server么翰,而且前端的nginx沒(méi)有開(kāi)啟gzip,同時(shí)纠吴,我們后端的nginx上沒(méi)有設(shè)置gzip_http_version為1.0硬鞍,那么Cache的url將不會(huì)進(jìn)行g(shù)zip壓縮
gzip_proxied[off|expired|nocache|nostore|private|no_last_modified|no_etag|auth|any] ...
默認(rèn)值:off
Nginx作為反向代理的時(shí)候啟用,開(kāi)啟或者關(guān)閉后端服務(wù)器返回的結(jié)果戴已,匹配的前提是后端服務(wù)器必須要返回包含"Via"的 header頭固该。
off - 關(guān)閉所有的代理結(jié)果數(shù)據(jù)的壓縮
expired - 啟用壓縮,如果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 - 無(wú)條件啟用壓縮
gzip_vary on
和http頭有關(guān)系握联,加個(gè)vary頭桦沉,給代理服務(wù)器用的每瞒,有的瀏覽器支持壓縮,有的不支持纯露,所以避免浪費(fèi)不支持的也壓縮剿骨,所以根據(jù)客戶端的HTTP頭來(lái)判斷,是否需要壓縮