發(fā)布時間:2024-04-08 文章來源:深度系統(tǒng)下載 瀏覽:
我們AxureShop用了CDN,但每天還是有20G左右的流量走了源站。以前用的騰訊云CDN,最近換成自建CDN都存在這個現(xiàn)象。源站是按流量收費的,8毛錢1G,一個月下來要四五百的費用。沒有理由用了CDN還有這么大的流量啊。所以開始分析日志找原因。 ![]() 果然一查就發(fā)現(xiàn)了問題,原來是MP4文件一直在回源,文件并沒有被緩存到CDN服務(wù)器上,狀態(tài)碼為206。去反代服務(wù)器上對應(yīng)目錄查看,文件不存在。然后用瀏覽器直接訪問這個url,源服務(wù)器上就產(chǎn)生了狀態(tài)碼為206的請求記錄。 搜索了一圈,Nginx默認支持范圍請求(斷點續(xù)傳),MP4被網(wǎng)頁引用在瀏覽器播放時,用戶沒有看完就關(guān)閉了,所以就只傳輸了一部分內(nèi)容,并沒有完整請求到整個MP4文件。這個機制是為了省流量的,但造成CDN不能緩存這個文件。每次請求都是走源站流量。這也是為什么請求返回的是206的原因了。 那如何完整請求呢?我用瀏覽器下載到本地這樣能完成一次完整請求。這樣就可以被反代服務(wù)器緩存到了。于是我把日志里的MP4文件URL復(fù)制出來,用下載工具批量請求了一次。果然是可以的。但這個方法很蠢,畢竟還有很多文件沒有在日志里,數(shù)量還很大。不能天天查日志來下載MP4文件吧? 在源站上把斷點續(xù)傳關(guān)掉不就行了,查了一下還真有辦法。只需要在源站的Nginx配置文件里加一條max_ranges 0;就可以了。然后觀察訪問日志,果然每條請求都是200了。反代服務(wù)器上也自動緩存了對應(yīng)的文件,這樣以后就不會回源了。 需要注意的是為了不影響主站,我們單獨給CDN請求配置了一個站點規(guī)則。這樣也便于故障排除和風(fēng)險管控。目前來看是完美解決了MP4總是回源的問題。 這個方法同樣適用于騰訊云等其他CDN,或者其他流媒體文件因此而產(chǎn)生的問題。 |
上一篇: