文章來自php中文網(wǎng)
這篇文章給大家介紹的內(nèi)容是關(guān)于 Nginx作為靜態(tài)資源web服務(wù)并進(jìn)行靜態(tài)資源壓縮,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
一、靜態(tài)資源web服務(wù)
1. 靜態(tài)資源類型
2. 靜態(tài)資源服務(wù)場(chǎng)景-CDN
二、靜態(tài)資源核心配置
1. 文件讀取 sendfile
sendfile 是一種高效傳輸文件的模式.
sendfile設(shè)置為on表示啟動(dòng)高效傳輸文件的模式。sendfile可以讓Nginx在傳輸文件時(shí)直接在磁盤和tcp socket之間傳輸數(shù)據(jù)。如果這個(gè)參數(shù)不開啟,會(huì)先在用戶空間(Nginx進(jìn)程空間)申請(qǐng)一個(gè)buffer,用read函數(shù)把數(shù)據(jù)從磁盤讀到cache,再?gòu)腸ache讀取到用戶空間的buffer,再用write函數(shù)把數(shù)據(jù)從用戶空間的buffer寫入到內(nèi)核的buffer,最后到tcp socket。開啟這個(gè)參數(shù)后可以讓數(shù)據(jù)不用經(jīng)過用戶buffer。
語(yǔ)法
2. tcp_nopush
在 sendfile 開啟的情況下,提高網(wǎng)絡(luò)數(shù)據(jù)包的傳輸效率。
tcp_nopush指令,在連接套接字時(shí)啟用linux系統(tǒng)下的TCP_CORK。該選項(xiàng)告訴TCP堆棧附加數(shù)據(jù)包,并在它們已滿或當(dāng)應(yīng)用程序通過顯式刪除TCP_CORK指示發(fā)送數(shù)據(jù)包時(shí)發(fā)送它們。 這使得發(fā)送的數(shù)據(jù)分組是最優(yōu)量,并且因此提高了網(wǎng)絡(luò)數(shù)據(jù)包的傳輸效率。
也就是說 tcp_nopush=on 時(shí),結(jié)果就是數(shù)據(jù)包不會(huì)馬上傳送出去,等到數(shù)據(jù)包最大時(shí),一次性的傳輸出去,這樣有助于解決網(wǎng)絡(luò)堵塞,雖然有一點(diǎn)點(diǎn)延遲。
語(yǔ)法
3. tcp_nodelay
在 keepalive 連接下,提高網(wǎng)絡(luò)數(shù)據(jù)包的傳輸實(shí)時(shí)性。
tcp_nodelay選項(xiàng)和tcp_nopush正好相反,數(shù)據(jù)包不等待,實(shí)時(shí)發(fā)送給用戶。
語(yǔ)法
4. 壓縮
開啟壓縮,可以加快資源響應(yīng)速度,同時(shí)節(jié)省網(wǎng)絡(luò)帶寬資源。
ngx_http_gzip_module
語(yǔ)法
開啟關(guān)閉壓縮
壓縮等級(jí)配置(壓縮等級(jí)越高,越消耗服務(wù)器資源)
gzip協(xié)議版本配置
壓縮擴(kuò)展模塊
預(yù)讀gzip功能 ngx_http_gzip_static_module
應(yīng)用支持gunzip的壓縮方式 ngx_http_gunzip_module
三、靜態(tài)資源壓縮實(shí)例
1. vim /etc/nginx/conf.d/static.conf
2. nginx -s reload 重新載入nginx配置文件
3. 創(chuàng)建 /vagrant/doc/a.txt 文件,并查看文件大小
可見,a.txt 文件大小為 558K
4. 通過curl訪問 192.168.33.88/a.txt,查看http響應(yīng)頭信息
從響應(yīng)頭信息中可看出服務(wù)器使用了gzip壓縮
5. 通過瀏覽器訪問 192.168.33.88/a.txt,使用開發(fā)者工具查看請(qǐng)求文件的大小
可見,經(jīng)過gzip壓縮,請(qǐng)求文件由558K被壓縮到148K,壓縮比例很高。
6. 另外還可以通過nginx的access.log日志查看傳輸文件的大小
可看出傳輸文件大小為 151549,單位是B,換算成KB約為148KB。