網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
簡(jiǎn)介
GZIP顧名思義,就是將文件壓縮傳輸。圖片、視頻、大文件不建議使用壓縮,壓縮需要占用你的服務(wù)器資源,壓縮完效果也不大。文章出現(xiàn)很多圖片的話,我建議使用圖床來(lái)存放你的圖片。文章給大家介紹Nginx的gzip指令。
說(shuō)一段廢話
壓縮響應(yīng)數(shù)據(jù)有什么作用呢?問(wèn)的好:從用戶體驗(yàn)和IT成本兩方面回答這個(gè)問(wèn)題:
- 用戶體驗(yàn)上
網(wǎng)速一定的情況下,傳輸5MB數(shù)據(jù)比傳輸10MB數(shù)據(jù)的時(shí)間快了一半。所以傳輸數(shù)據(jù)越小用戶加載頁(yè)面就越快,當(dāng)然相比較之下體驗(yàn)會(huì)更好。
- IT成本上
對(duì)這個(gè)場(chǎng)景來(lái)說(shuō)的成本主要是帶寬成本, 數(shù)據(jù)不壓縮那么傳輸這些數(shù)據(jù)相應(yīng)的帶寬肯定更大,對(duì)比之下壓縮耗費(fèi)的CPU資源在帶寬費(fèi)用上不值一提。
所以你有什么理由不用壓縮呢?
背景
當(dāng)然Nginx也提供了gzip的壓縮方式可以使用,但是在日常的工作中我發(fā)現(xiàn)或多或少在使用上有些問(wèn)題,有點(diǎn)像:用了但又好像沒(méi)用的感覺。 這篇就記錄一下gzip的使用方式和易錯(cuò)點(diǎn)。
指令介紹
gzip
gzip指令來(lái)自 ngx_http_gzip_module 模塊,提供的核心能力就是壓縮響應(yīng)數(shù)據(jù)。
該模塊下提供的指令如下:
gzip on; # 開啟gzip
gzip_comp_level 6; # 壓縮等級(jí):1-9 1:壓縮最快/CPU消耗最少/壓縮率最低 以次類推
gzip_min_length 1000; # 小于此大小的數(shù)據(jù)不壓縮(單位字節(jié)/byte);數(shù)據(jù)來(lái)源"Content-Length"頭
gzip_buffers 32 4k; # 壓縮響應(yīng)的緩沖區(qū)數(shù)量和大小(4K 內(nèi)存頁(yè)大小取決于平臺(tái))
gzip_proxied any; # 對(duì)代理的請(qǐng)求是否開啟壓縮
gzip_types text/plain application/xml application/javascript application/x-javascript text/css application/json; # 哪些類型的數(shù)據(jù)需要被壓縮
gzip_disable "MSIE [1-5]\."; # User-Agent 被正則匹配到的不開啟壓縮
gzip_vary on; # 當(dāng)gzip對(duì)請(qǐng)求生效時(shí)會(huì)被添加一個(gè)響應(yīng)頭 "Vary: Accept-Encoding"
tips:
- gzip 是動(dòng)態(tài)壓縮: 每個(gè)請(qǐng)求在被響應(yīng)時(shí)都會(huì)在gzip邏輯內(nèi)走一遍
- 壓縮等級(jí)不是越高越好: 壓縮到一定程度后就會(huì)吃力不討好, 從js的測(cè)試來(lái)看性價(jià)比最高的級(jí)別是 5或6
- buffer大小設(shè)置最好是和平臺(tái)的內(nèi)存頁(yè)保持一致: getconf PAGE_SIZE
- gzip_types不要瞎寫: 寫壓縮率大的(css/js/xml/json/ttf), image圖片就不要寫了,壓縮空間太小,又耗CPU
gzip_static
gzip_stati指令來(lái)自 ngx_http_gzip_static_module模塊,提供的核心能力是靜態(tài)/預(yù)壓縮
該模塊提供的指令如下:
gzip_static on|off|always; # always: 不管客戶端是否支持壓縮我他媽全部給你壓縮之后給你
tips:
- 可以復(fù)用gzip_module中以下的指令:
gzip_http_version, gzip_proxied, gzip_disable, gzip_vary
- gzip_static是靜態(tài)壓縮:意思是你的服務(wù)端需要同時(shí)存在源文件和使用gzip壓縮后的源文件,這時(shí)請(qǐng)求的時(shí)候會(huì)優(yōu)先吧壓縮文件返回,這樣就不用再耗費(fèi)CPU去動(dòng)態(tài)壓縮了。(視情況來(lái)用,我們沒(méi)用)
- 可以和gzip一同開啟,沒(méi)啥影響,它的優(yōu)先級(jí)高于gzip
易錯(cuò)點(diǎn)提示
在實(shí)際的生產(chǎn)環(huán)境中架構(gòu)都比較負(fù)載,不像一個(gè)單純的Nginx一樣,我配置好了就萬(wàn)事大吉了。
時(shí)常會(huì)遇到有些網(wǎng)站明明配置了gzip但是展示上看并沒(méi)有生效,為什么?
此時(shí)需要梳理這個(gè)請(qǐng)求流程,看看這個(gè)請(qǐng)求都經(jīng)過(guò)了哪些地方,比如 你的請(qǐng)求通過(guò)三次代理(CDN-->Nginx-->Nginx)那么在其中一層沒(méi)有配置或者配置錯(cuò)誤那么整體的返回?cái)?shù)據(jù)就是沒(méi)有被壓縮的, 這種情況出現(xiàn)還是比較多的。
原文鏈接:https://www.cnblogs.com/chaizhenhua/p/16245875.html
相關(guān)推薦
- 2022-05-21 服務(wù)發(fā)現(xiàn)與負(fù)載均衡機(jī)制Service實(shí)例創(chuàng)建_服務(wù)器其它
- 2022-03-31 C#值類型、引用類型、泛型、集合、調(diào)用函數(shù)的表達(dá)式樹實(shí)踐_C#教程
- 2022-05-26 Python學(xué)習(xí)之文件的讀取詳解_python
- 2022-10-16 C++的array和&array有什么區(qū)別_C 語(yǔ)言
- 2022-03-19 Linux系統(tǒng)下安裝Redis數(shù)據(jù)庫(kù)過(guò)程_Redis
- 2022-05-28 教你C#將CSV轉(zhuǎn)為Excel的實(shí)現(xiàn)方法_C#教程
- 2022-11-26 詳解vant2?自動(dòng)檢查表單驗(yàn)證?-validate_React
- 2022-10-03 Python?numpy.transpose使用詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支