Nginx啟用gzip很簡(jiǎn)單,只需要設(shè)置一下配置文件即可完成,可以參考文章Nginx如何配置Gzip壓縮功能。不過(guò),在群里常有人提到,他們的網(wǎng)站Gzip壓縮雖然成功了,但檢測(cè)到JS仍然沒(méi)有壓縮成功,這是為什么呢?經(jīng)過(guò)我的檢查發(fā)現(xiàn),原來(lái)是他們的gzip_types設(shè)置不對(duì)造成的,本文就為遇到同樣情況的人解決這一問(wèn)題。
Nginx啟用Gzip壓縮js無(wú)效
某群友在群里提到,他啟用了網(wǎng)站的Gzip壓縮,通過(guò)站長(zhǎng)工具Gzip壓縮檢測(cè)檢測(cè)到啟用成功了,想著其他文件如CSS、JS等也都?jí)嚎s成功了,但是通過(guò)進(jìn)一步檢測(cè)各種類(lèi)型的壓縮情況,發(fā)現(xiàn)JS文件并沒(méi)有啟用Gzip壓縮,這令他非常納悶,不知何故。
圖1:Nginx啟用Gzip壓縮js無(wú)效
根據(jù)經(jīng)驗(yàn),我認(rèn)為可能原因是他的配置文件里gzip_types的內(nèi)容沒(méi)有寫(xiě)對(duì),于是問(wèn)他gzip_types的內(nèi)容是什么,他說(shuō)是這樣設(shè)置的:
圖2:gzip_types的配置
我仔細(xì)看了他的gzip_types的內(nèi)容,再看圖1中的Header信息,發(fā)現(xiàn)Content-Type項(xiàng)的“application/javascript”并沒(méi)有出現(xiàn)在他的gzip_types內(nèi)容里,于是我叫他把“application/javascript”寫(xiě)到他的gzip_types里,他按照我的要求做了后,再檢測(cè)一下,js文件的gzip壓縮終于啟用成功了。
圖3:Nginx啟用Gzip壓縮js成功
經(jīng)驗(yàn)
上述案例是該群友沒(méi)有在gzip_types里加入“application/javascript”而導(dǎo)致其JS文件沒(méi)有壓縮成功,但是經(jīng)發(fā)現(xiàn),某些群友即使加入了“application/javascript”也同樣出現(xiàn)JS文件沒(méi)有壓縮成功的狀況,這是為什么呢?原來(lái),各網(wǎng)站的JS類(lèi)型“content-type”內(nèi)容不盡相同,Nginx配置gzip是要把各種類(lèi)型文件的“content-type”內(nèi)容加進(jìn)去才行,不加進(jìn)去就不能被壓縮。
所以,當(dāng)發(fā)現(xiàn)Nginx壓縮JS沒(méi)有成功時(shí),可先查看網(wǎng)站JS的Header信息,如圖1那樣檢測(cè)(地址:http://pagespeed.webkaka.com/youhua/gzip/),便可獲得js文件的“content-type”內(nèi)容。獲得其“content-type”內(nèi)容,再看看配置文件的gzip_types里有沒(méi)有此項(xiàng)內(nèi)容,如果沒(méi)有,加入去即可解決問(wèn)題。
一鍵檢測(cè)網(wǎng)站各類(lèi)型文件是否啟用gzip
值得注意的問(wèn)題是,網(wǎng)站啟用了Gzip壓縮并不等于各類(lèi)型文件都啟用了Gzip壓縮,這與設(shè)置是否得當(dāng)有關(guān)。不過(guò)如果需要你一個(gè)個(gè)文件的輸入去檢測(cè),那未免有點(diǎn)繁瑣。為此,卡卡網(wǎng)可以幫助你解決這一煩惱,一鍵檢測(cè)網(wǎng)站各類(lèi)型文件是否啟用gzip壓縮。檢測(cè)地址是http://pagespeed.webkaka.com/,檢測(cè)結(jié)果看下圖:
圖4:一鍵檢測(cè)網(wǎng)站各類(lèi)型文件是否啟用gzip