CDN下载文件报错

小丫2年前技术文章1746

一、问题现象

通过域名下载文件,下载到100M左右的时候,会提示下载错误,无法继续下载。

二、解决思路

业务链路:域名解析到cdn---slb--后端服务器。首先需要判断问题出在哪一层,再看这一层是否有什么配置导致下载错误。

1.slb ip 未开启访问控制策略,使用slb ip进行下载测试,可以下载成功。说明slb及之后的链路都是通的,问题出在cdn这一层。

2.定位到是cdn的问题后,根据以往的经验,怀疑可能是cdn的某个超时时间配置的过短导致下载失败。

3.排查后发现cdn超时时间合理,问题在cdn产品及nginx策略配置

三、解决步骤

1.分析访问域名的返回结果

image.png

从Response Headers分析可以得到以下几个信息:

  • X-Cache: MISS TCP_MISS dirn:-2:-2表示这是一个MISS的请求,是回源的。

  • X-Swift-CacheTime: 0表示这个请求是无法缓存到CDN上的,每次都需要回源。

  • Cache-Control: public, max-age=0表示这里源站响应了max-age=0,是导致CDN无法缓存的原因。

2.问题原因

     这个是产品层面的一个限制,对于超过100MB的文件,如果源站响应了Cache-Control为max-age=0、no-cache等不缓存的策略,将导致CDN无法缓存,这类请求会被CDN的Swift缓存组件断开。这主要是因为如果大文件请求不执行缓存,那么每次都需要回源,相当于CDN没有起到加速效果,而且对于CDN的回源带宽以及源站的性能都有影响。

3.解决方案

   源站删除不缓存的Cache-Control头,支持CDN可以缓存此类文件。同时,对于大文件,如果源站支持Range,建议CDN层面开启Range回源功能。

image.png

在nginx配置中加入如下内容:

etag on;

add_header Last-Modified “”;

add_header Cache-Control max-age=86400;

  重启nginx后问题解决


相关文章

开源Kubernetes工具

开源Kubernetes工具

类别 1:运行 Kubernetes 环境Minikube 仍然是最佳的几乎每个 Kubernetes 教程都是从“下载 Minikube”开始的,这在今天仍然行得通。如果你想在一个真正低风险的环境中...

MS SQL Server partition by 函数实战二 编排考场人员

需求假设有若干已分配准考证号的考生,准考证号示例(01010001)共计8位,前4位为分类号,后4位为分类下的总排序号。现提供考场分配信息EXCEL文件(包括考场编号 、考场名称、考场容纳人数等),希...

oracle安装实例的响应文件模板解析

位置在:db解压目录下database/response/dbca.rsp###############################################################...

 大数据集群监控配置操作指导(四)Spark监控使用jmx

大数据集群监控配置操作指导(四)Spark监控使用jmx

graphite_exporter方式Graphite 来收集度量标准,Grafana 则用于构建仪表板,首先,需要配置 Spark 以将 metrics 报告到 Graphite。prometheu...

sparksql集成ranger权限测试

sparksql集成ranger权限测试

##启动thriftserver cd /opt/dtstack/spark/spark_pkg/sbin ./start-thriftserver.sh \ --master yarn \...

GET和POST请求的区别

GET和POST请求的区别GET请求GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。