CDN下载文件报错

小丫2年前技术文章1762

一、问题现象

通过域名下载文件,下载到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后问题解决


相关文章

Zeppelin简介

1.    Zeppelin1.1.  Zeppelin是什么zeppelin是一个非常流行的开源数据探索分析平台。zeppelin集成了非...

trino组件对接hive(一)

前提:本文是在部署了trino组件和hive组件后,进行的trino与hive组件的对接。1、增加hive connector配置在trino安装部署下的etc/catalog下,创建hive.pro...

MySQL运维实战(5.2) MySQL charset基本概念

mysql多字符集mysql支持多字符集。一个数据库中可以存储不同字符集的数据,一个表的不同字段可以使用不同的字符集。mysql> show character s...

SQL Server优化入门系列(一)——快速定位阻塞SQL

SQL Server优化入门系列(一)——快速定位阻塞SQL

引言我们在运维数据库的时候,经常会面对这样的问题:数据库现在运行得怎么样有哪些会话在执行,当前状态是什么,在执行什么SQL哪些会话被阻塞,阻塞原因是什么会话是从哪些IP连接过来的,使用了什么账号通过这...

大数据组件--Hive与Impala的异同

大数据组件--Hive与Impala的异同

一、同数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。元数据:两者使用相同的元数据。SQL语法:基本类似。二、异1)、底层运行使用的技术hive底层默认使用mapreduce引...

Spark对接ranger

Spark对接ranger

1、包如图所示https://dtstack-download.oss-cn-hangzhou.aliyuncs.com/insight/insight-4em/release/hadoop/spar...

发表评论    

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