一.為什麼nginx要使用gzip
1,壓縮的作用:
頁面使用gzip壓縮之後,
頁面大小可以壓縮到原來的1/7左右,
傳輸速度和頁面打開時間都可以大幅度提高,
有利於用戶訪問頁面體驗的提升
2,Nginx實現gzip壓縮的原理:
通過ngx_http_gzip_module模塊攔截請求,
並對需要做gzip的類型做gzip壓縮
3, ngx_http_gzip_module是Nginx默認集成的,
不需要重新編譯,直接開啟即可
源碼:https://github.com/liuhongdi/
二.gzip模塊使用例子
gzip on; gzip_min_length 1k; gzip_disable "MSIE [1-6]."; gzip_comp_level 5; gzip_types text/css text/javascript text/xml text/plain application/json application/javascript application/x-javascript application/xml application/xml+rss; gzip_http_version 1.1;
各個指令的說明:
gzip on;
開啟gzip模式,
默認值是off,就是不啟用gzip壓縮功能
當然是要把它設置為on了
gzip_min_length 1k;
設置允許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。
太小的文件內容壓縮之後效果不明顯,甚至會比不壓縮時更大。
默認值是20,這個值過小,
一般設置為長度不小於1k
gzip_disable
IE6對Gzip支持效果較差,所以針對它不啟用
gzip_comp_level :
gzip 壓縮級別,1-9,
數字越大壓縮的比例越高,但也越佔用CPU時間
它的默認值是1,通常會設置為5或6
如果cpu佔用高,設置為2或3也可以
gzip_http_version :
設置gzip壓縮所支持的最小HTTP版本,
如果低於該版本不使用gzip壓縮。
默認值是1.1
一般使用1.1。
gzip_types :
針對哪些類型的頁面才啟用gzip壓縮,有多個值則用空格分隔。
通配符*可以匹配任意類型,但不要用這個值。
只有js/css/html/text這幾類內容壓縮才有明顯的效果,
圖片和視頻等本身經過壓縮算法處理過的文件啟用壓縮也沒有明顯效果。
1,不管是否指定text/html類型,該類型的響應總是啟用壓縮,
所以這個值可以不用寫上
2,這些文件類型對應的mime-type可以參考nginx/conf/mime.types文件
3,常用的9個值:
text/css text/javascript text/xml text/plain
application/json application/javascript application/x-javascript
application/xml application/xml+rss
三.例子中未用到的其他設置項:
gzip_buffers 4 16k;
gzip_vary on;
gzip_proxied any;
gzip_vary:
vary header支持,
on的話會在Header裡增加"Vary: Accept-Encoding"
這個值可以讓前端的緩存服務器緩存經過GZIP壓縮的頁面,
例如用Squid緩存經過nginx壓縮的數據
如果在nginx前端使用了squid或varnish,
可以設置此值為on
gzip_proxied
nginx 做前端代理時啟用該選項,
如果值是 any, 表示無論後端服務器的headers頭返回什麼信息,
都無條件啟用壓縮
如果用了nginx作反向代理,
設置此值為any
gzip_buffers:
設置用於處理壓縮的緩衝區大小。
默認值:32 4k|16 8k
32 4k代表以4k為單位將響應數據以4k的32倍(128k)的大小申請內存。
建議此項不設置,使用默認值
四.查看gzip的壓縮效果
1,使用curl查看
#-I, --head Show document info only 只顯示頭信息
#-H,--header LINE: Pass custom header LINE to server (H) 自定義請求頭的信息
[root@localhost curl]# curl -I -H "Accept-Encoding: gzip, deflate" http://www.lhdtest.net HTTP/1.1 200 OK Server: openresty Date: Mon, 27 Apr 2020 07:59:38 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding Set-Cookie: SESSID_WEB=0ks2eh03vmv4dhje29ggojl1bs; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-Encoding: gzip
說明:看到Conten_Encoding: gzip則表示gzip壓縮已生效
2,通過瀏覽器查看效果
從瀏覽器端響應頭信息看gzip是否生效:
看截圖:壓縮前和壓縮後的效果對比:
壓縮前:
壓縮後:
說明:我使用的是firefox的web控制檯,大家也可用yslow之類的插件試試
五.查看nginx的版本:
[root@centos8 soft]# /usr/local/soft/nginx-1.18.0/sbin/nginx -v nginx version: nginx/1.18.0
[f2h0b53ohn ] Nginx基於gzip壓縮提高訪問速度已經有1198次圍觀