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