发布时间: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,或者其他流媒体文件因此而产生的问题。 |
上一篇: