全面比较Amazon CloudFront,Azure CDN和Google Cloud CDN教程
Cloud CDN比较摘要
目录
- 1什么是CDN
- 2 CDN服务
- 3种不同的模式
- 每个云服务4 CDN
- 5 Amazon CloudFront / Azure CDN / Google Cloud CDN功能比较表
- 6连接方法的详细说明
- 6.1关于连接类型
- 6.2连接到存储
- 6.3与云的其他连接
- 6.4连接到云外部的源
- 7 “价格,价格,成本,成本”的详细说明
- 7.1关于数据传输费
- 7.2 HTTP / HTTPS请求费
- 7.3从云到CDN的数据传输费
- 7.4无效的请求
- 8云CDN费成本比较(Gigazine编)
- 9 “ SSL / TLS”的详细说明
- 10 “缓存无效(删除)”详细说明
- 11 “使用gzip等CDN压缩”的详细说明
- 11.1关于原始压缩,例如gzip
- 11.2关于CDN中的gzip等压缩
- 12 “原始域”的详细说明
- 12.1关于原始域设置(http)
- 12.2关于原始域设置(https / SSL)
- 13 “限制公开”的详细说明
- 13.1每个国家/地区的披露设置
- 13.2关于签名的URL(限时URL /一次性URL)
- 13.3 基本/摘要式身份验证
- 14 “错误显示”的详细说明
- 15其他
- 15.1原点超时设置
- 15.2关于唯一标头设置
- 15.3禁止直接进入原产地
- 15.4查询字符串设置
- 15.5关于CDN中的TTL指定
- 15.6关于预缓存(预取)
- 15.7关于多来源
- 15.8关于IP地址
- 16关于发生安全事故的可能性
什么是CDN
在比较和解释Amazon CloudFront,Azure CDN和Google Cloud CDN之前,让我们先谈谈CDN是什么。
CDN代表“内容交付网络”,并发音为“ CDN”。粗略地说,CDN运营商会设置服务器并以服务运营商的名义代表您交付内容。
您可以获得的好处是:
- 负责服务器负载
- 节省网络带宽
- 快速(可能),因为最终用户(用户)附近有CDN服务器
- 响应会更快,因为它会缓存
- 可以使用一次性URL,计时器功能等(可能是)
例如,当我在以前参与的EC站点上将映像转换为CDN时,网络峰值传输量减少了70%,服务器负载减少了20%。通过减少网络合同的带宽成本,每月可节省300,000,而CDN成本为20,000日元/月。缺点如下。
- 花费金钱
- 如果使用不当,可能会发生安全事件(请参阅下文)
- 处理Cookie时必须小心,因为它可能是不同的FQDN
CDN服务
- 总大小2.5MB:分解如下
- – 35%的图片(893KB)
- – 25%脚本(644KB)
- – 3%HTML(86KB)
- –其他的35%(891KB)(包括700KB以上的视频mp4文件)
Gigazine乍一看,似乎将相同的内容返回给每个人(实际上,它似乎具有“秘密俱乐部”会员功能,但大多数似乎是由非会员访问的)。当每个人都有相同的内容时,CDN效果最佳。如果发送给用户A的图像文件已缓存在CDN中,则用户B可以使用该缓存。
从上述比率来看,如果可以将图像+脚本+视频mp4文件转换为CDN,则可以通过CDN传递90%以上的数据,并相应减少对Gigazine服务器的访问。
各种图案
如果您不使用CDN,则您与服务提供商之间的关系如下。
- 用户←→服务提供商服务器
如果您使用CDN,则CDN运营商已成问题。在这种情况下,服务提供商称为起源(origin是英文单词,表示起源或起源)。
- 用户←→CDN运营商服务器←→服务提供商(来源)
有多种连接方法。在以下情况下,您首先没有使用云服务,而是仅将映像放在CloudFront上。
- HTML内容(www.myservice.xxx)
- 用户←→服务提供商
- 图片(img.myservice.xxx)
- 用户←→Amazon CloudFront←→服务提供商服务器
下面是使用EC2生成HTML的表单,图像出现在S3上,并且每个都使用CloudFront。
- HTML内容(www.myservice.xxx)
- 用户←→Amazon CloudFront←→服务提供商使用的EC2
- 图片(img.myservice.xxx)
- 服务提供商使用的用户←→Amazon CloudFront←→S3
每个云服务的CDN
亚马逊,微软和谷歌提供的CDN服务如下。Azure令人困惑,但是有四种类型。
- AWS提供的CDN服务是“ Amazon CloudFront”
- Google提供的CDN服务是“ Google Cloud CDN”
- Microsoft提供了以下四个CDN服务,它们具有两个层次:标准和高级。
- Microsoft的Azure CDN标准版(Microsoft的缩写)(2018/9 GA)
- Akamai的Azure CDN Standard(标准Standard Akamai)
- Verizon的Azure CDN Standard(标准Verizon的缩写)
- Verizon的Azure CDN Premium(缩写Premium Verizon)
只有Azure CDN,所以让我解释一下。
Akamai是一家历史悠久的CDN运营商。我经常听到他们处理世界上10%到20%的流量,但是过去是否仍然是一个问题。寄希望。Verizon是美国领先的电信公司。尽管在日本这个名字并不很熟悉,但整个集团的销售额为12万亿日元。一家销售额为12万亿日元的日本公司大约是第五大公司,从本质上来说,它是一家庞大的公司。
首先是Verizon,然后是Akamai,然后是Microsoft。
Amazon CloudFront,Azure CDN,Google Cloud CDN的功能比较表
我总结了功能比较表。有关详情,请参见下文。
“连接方式”对照表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
连接方式 | 反向代理 | 反向代理 | 反向代理 |
连接到存储 | to(至S3) | ◯(至Azure存储) | ◯(至Google Cloud Storage) |
云中的其他连接 | ELB,EC2,AWS Lambda(= Lambda @ Edge) | 云服务,网络应用 | 云端负载平衡,Google Compute Engine |
连接到云外部的来源 | ◯ | ◯ | × |
“费用,价格,成本,成本”比较表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
数据传输费(日本,每月,前10 TB) | △0.140美元/ GB | ○标准:每GB 14.08日元,高级:每GB 26.096日元 | ◎0.09美元/ GB |
HTTP请求费(日本/每月) | △0.0090 USD / 10,000要求 | ◎无 | ○0.0075美元/ 10,000个请求 |
HTTPS请求费 | △0.0120 USD / 10,000要求 | ◎无 | ○与HTTP相同 |
云到CDN的转移费用 | ◎免费 | ◎免费 (2019年10月起) |
△已付 |
无效的要求 | 前1000次通过不收取额外费用,之后每通$ 0.005 | 无 | 无 |
SSL / TLS比较表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
SSL / TLS | ◯ | ◯ | ◯ |
免费的SSL / TLS证书 | ◯ | ◯ | ◯ |
观看者的SSL / TLS | ◯(仅http /仅https / http→https重定向) | △(仅禁用http) | ×? |
SSL / TLS起源 | 可选(仅http /仅https /根据查看器协议) | ? | ? |
“缓存失效(删除)”比较表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
缓存失效(删除) | ◯ | ◯ | ◯ |
缓存失效速度 | 5秒内达到90%,1分钟内完成 | Verizon 2-3分钟,Akamai 7分钟 | 分钟 |
使缓存无效时的通配符规范 | ◯ | △(仅限标准Verizon,Premium Verizon) | ◯ |
“使用gzip等CDN压缩的比较表”
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原始压缩,例如gzip | ◯ | ◯ | ◯ |
CDN中的压缩,例如gzip | ◯ | ◯ | × |
“唯一域”比较表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原始域设置(http) | ◯ | ◯ | ○ |
原始域设置(https / SSL) | ◯ | △(仅限标准Verizon,Premium Verizon) | ? |
“限制披露”对照表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
每个国家/地区的可用性设置 | ◯ | ◯ | × |
签名的URL(有时间限制的URL /一次性URL) | ◯ | △(仅限Verizon提供) | ○ |
基本/摘要式身份验证 | △(可以中继到原点) | ? | ? |
“错误显示”比较表
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
自定义错误显示 | ◯ | × | × |
错误页面TTL规范 | ◯ | × | × |
其他
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原点超时设置 | 4-60秒 | × | × |
自定义标题设置 | ◯ | Premium可以吗? | ×? |
禁止直接获取原产地 | ◯ | ? | ? |
查询字符串设置 | ◯(白名单/黑名单) | △(忽略查询,不与查询一起缓存,将查询视为单独的内容,只是其中之一) | ◯(白名单/黑名单) |
CDN中的TTL指定 | (可以被CDN覆盖) | ×(需要在原点进行设置) | ×(需要在原点进行设置) |
预缓存(预取) | × | ◯(仅限标准Verizon,Premium Verizon) | × |
多源 | ◯ | ×? | ◯ |
IP地址 | 多个 | 多个 | 单个IP地址 |
这是比较表。详细说明如下。
《连接方式》详细说明
关于连接类型
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
连接方式 | 反向代理 | 反向代理 | 反向代理 |
Amazon CloudFront,Azure CDN和Google Cloud CDN都是反向代理类型。世界上有两种类型的CDN,
- A.通过使用FTP等将文件上传到指定服务器上的指定文件夹,可以进行分发。
- B.反向代理类型。将您的内容放在某个网站上,并将其设置为访问CDN(如果可以访问)
但是所有三个CDN均为B。过去,我觉得A太多了,但是上传文件很麻烦,而且由于A无法处理动态内容,因此页面管理员认为B并不是当前的主流。你呢
连接到存储
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
连接到存储 | to(至S3) | ◯(至Azure存储) | ◯(至Google Cloud Storage) |
AWS,Azure和GCP CDN都可以连接到各自的存储服务。
- Amazon CloudFront→Amazon S3
- Azure CDN→Azure存储
- Google Cloud CDN→Google Cloud Storage
就是那个
另外,在Amazon S3和Azure存储中,都可以通过http / https发布放置的文件(不使用CDN)。考虑将CDN用作附加值,例如速度和现金。另外,默认情况下,Google Cloud Storage具有边缘缓存功能。
与云的其他连接
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
云中的其他连接 | ELB,EC2,AWS Lambda(= Lambda @ Edge) | 云服务,网络应用 | 云端负载平衡,Google Compute Engine |
从CDN到除存储之外的其他连接也是可能的。
关于连接到云外部的来源
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
连接到云外部的来源 | ◯ | ◯ | × |
除云之外的其他来源都可以与Amazon CloudFront和Azure CDN一起使用,但不能与Google Cloud CDN一起使用。换句话说,这意味着“ Amazon CloudFront / Azure CDN可以指定除云服务以外的其他资源,例如,Sakura Internet或本地服务器作为源,但Google Cloud CDN不能。
“价格,价格,成本,成本”的详细说明
价格和成本大致是AWS> Azure >>>> GCP(我对此页面管理员的看法)。
关于数据传输费
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
数据传输费(日本,每月,前10 TB) | △0.140美元/ GB | ○标准:每GB 14.08日元,高级:每GB 26.096日元 | ◎0.09美元/ GB |
数据传输费是将数据从CDN传输到Internet的成本和成本。例如,当普通用户的浏览器从CDN检索图像文件时,将收取此费用。无论您是否通过CDN兑现,您都需要支付这笔费用。如果使用gzip压缩内容或使用304 Not Modfied返回内容,则可以保存。
关于HTTP / HTTPS请求费
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
HTTP请求费(日本/每月) | △0.0090 USD / 10,000要求 | ◎无 | ○0.0075美元/ 10,000个请求 |
HTTPS请求费 | △0.0120 USD / 10,000要求 | ◎无 | ○与HTTP相同 |
“ HTTP请求费”是针对每个抛出的GET方法收取的费用。对于10,000个请求,AWS费用为0.0090美元,Google Cloud CDN费用为0.0075美元。“ HTTPS请求费”是其HTTPS版本。在Amazon CloudFront上,HTTPS的价格是HTTP的1.33倍,但HTTP和HTTPS的GCP相同。而且Azure CDN通过HTTPS是免费的。将来,HTTPS的趋势将加速发展,因此HTTPS价格便宜是很好的。
而且,Azure CDN不对HTTP / HTTPS的请求数量收费。一切都取决于传输的数据量。稍后我们将看到,如果您的文件大小很小且请求数量很大,则此功能可以使价格大大低于其他公司。
关于从云到CDN的数据传输费
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
云到CDN的转移费用 | ◎免费 | ◎免费 (2019年10月起) |
△已付 |
在AWS上,自2013年以来,从“ S3,EC2和ELB”切换到“ CloudFront”时S3,EC2和ELB的转移费是免费的(在此之前收取)。
至于Azure CDN,从2019年10月起将免费提供“ Azure存储/ Azure媒体服务/ Azure应用程序网关”→“ Azure CDN”。点击此处查看公告。
不幸的是,不幸的是,Google Cloud CDN转让费昂贵。换句话说,如果“ Azure存储”→“ Azure CDN”或“ Google Cloud Storage”→“ Google Cloud CDN”,则将在Azure存储/ Google Cloud Storage中收取数据传输费。
这对于文件大小很大或文件数量很大的系统(例如视频分发)非常重要,因为仅从源到CDN的传输量不会很愚蠢。另一方面,如果最多有成千上万的图像类型(例如EC站点上的产品图像),则不太可能发挥很大作用。
关于无效的要求
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
无效的要求 | 前1000次通过不收取额外费用,之后每通$ 0.005 | 无 | 无 |
仅Amazon CloudFront会对无效请求收取费用。例如,无效请求是导致未找到404的请求。“路径”是一种使用“ / aaa”计算一个路径并使用“ / abc”计算另一个路径的方法。
没什么大不了的,但是我担心如果恶意的第三方通过各种途径发出请求…
Azure CDN和Google Cloud CDN不收取无效请求。
Cloud CDN价格成本比较(Gigazine)
让我们在Gigazine的网站上获得报价,以了解CDN费率有多大差异。
根据Gigazine的说法 ,首页是121个请求,第一页是1.4MB,第二页及以后的时间约为300KB。所有页面均为HTTPS。假设所有页面具有相同数量的请求和大小,并且第一时间:第二时间和后续时间的比率为1:9。 请求数量为121亿个,因为截至2015年为每月1亿PV。然后,第一次访问的传输量为14 TB(1亿PV x 10%x 1.4 MB),第二次及以后的访问量为27 TB(= 1亿PV x 90%x 300 KB)。总传输量41TB,121亿个请求。
结果如下。多么(粗鲁)是Azure CDN的压倒性胜利。
- Amazon CloudFront:2,267,226日元(不含税)
- Azure CDN:620,940日元(不含税)
- Google Cloud CDN:1,347,257日元(不含税)
其他详细假设如下。
- 高速缓存命中率是95%,因为它几乎是静态内容。
- 汇率为1美元= 121日元(截至2018/1)。
- Azure CDN是标准(不是高级)。
- Azure CDN不使用数据传输加速(DSA)。
- 区域之间无转移(东京用户→东京CDN→东京服务器)
- 原始服务器在云外部。它不是Amazon CloudFront→EC2,而是外部服务器,例如Amazon CloudFront→Sakura。
- 每个公司的价格显示均不含税。AWS / Azure已声明不含税,但GCP找不到。
- 转移金额使用Chome的开发人员工具。我们认识到转移金额包括响应头,但没有确认。如今,响应头通常具有很长的cookie,因此,如果此识别错误,则数据传输可能会增加10-20%。
细目如下。
- 亚马逊CloudFront:2,267,226日元
- 首个10TB传输量:10,240GB(= 10TB)x 0.14USD x 112日元= 160,563日元
- 接下来的40 TB的传输量:31,744 GB(= 31 TB)x 0.135 USD x 112日元= 480,423日元
- 请求:121亿个请求り$ 10,000 / 10,000 PV x 112日元= 1,626,240日元
- Azure CDN:620,940日元
- 前10 TB的传输量:10,240(= 10 TB)x 15.46日元= 158,310日元
- 接下来的40 TB的传输量:31,744 B(31 TB)x 14.56日元= 462,629日元
- Google Cloud CDN:1,347,257日元
- 前10 TB的传输量:10,240 GB(= 10 TB)x 0.09 USD x 112日元= 103,219日元
- 接下来的140 TB的传输量:31,744 GB(= 10 TB)x 0.06 USD x 112日元= 213,521日元
- 请求数:121亿个请求/每10,000 PV x 0.0075USD x 112日元= 1,016,400日元
- 现金余额:42,014GB(= 41TB)x 5%现金损失x 0.06USD x 112日元= 14,117日元
毕竟,有如此多的请求,因此对请求数量不收取Azure CDN的费用。相反,仅通过CDN请求大图像或将图标与CSS Sprite结合使用将减少请求的数量。此外,大约有30%的请求不需要转换为CDN,例如对Javascript的广告调用,因此可能需要减少实际请求的数量。
尽管Amazon CloudFront和Google Cloud CDN具有类似的定价结构,但有趣的是,Google Cloud CDN的价格便宜了近40%。
关于“原始服务器在云外部”的假设,如果原始服务器在“云中”,例如EC2 / S3 / Azure VM / Azure存储/ Google Conmpute Engine / Google Cloud Storage, AWS不收取额外费用,但是Azure / GCP需要数据传输。但是,假设高速缓存命中率为95%,则数据传输将为5%,因此考虑得并不多。
如果您每月的传输量为数百TB到PB,则可能需要询问每个公司的销售额以进行估算。如果每月只有几十TB,这可能会有些微妙,但是如果您达到PB级,您将获得正常价格的一小部分。
「SSL / TLS」的详细说明
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
SSL / TLS | ◯ | ◯ | ◯ |
免费的SSL / TLS证书 | ◯ | ◯ | ◯ |
观看者的SSL / TLS | ◯(仅http /仅https / http→https重定向) | △(仅禁用http) | ×? |
SSL / TLS起源 | 可选(仅http /仅https /根据查看器协议) | ? | ? |
“缓存无效(删除)”的详细说明
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
缓存失效(删除) | ◯ | ◯ | ◯ |
缓存失效速度 | 5秒内达到90%,1分钟内完成 | Verizon 2-3分钟,Akamai 7分钟 | 分钟 |
使缓存无效时的通配符规范 | ◯ | △(仅限标准Verizon,Premium Verizon) | ◯ |
有时,很多时候您想使缓存的内容无效。“我上传了不正确的图像,因此希望您立即对其进行替换。”“我上传了不应上传的图像,因此希望您立即将其删除。” 在思考时,“如果您稍等片刻,它将很快被替换。”当您想到另一家公司有权获得的人才或产品的形象时,可能会被告知“立即!现在!”。另外,作为开发人员的错误,由于程序错误,TTL减少到一个月的情况很少见。
首先,删除CDN中的缓存是一个非常耗时的过程。全世界有数十到数百个边缘服务器站点,每个站点都有成百上千个服务器,因此您可以理解,删除所有服务器是一项艰巨的工作。我想
但是,似乎以前要花费数十分钟或几个小时,但是最近看来,它最迟在几分钟内完成。
此外,所有三个公司都可以指定通配符,例如“ / images / *”,但是请注意,Azure CDN不能仅为Akamai指定通配符。如果无法指定通配符,则必须使“ /images/0001.jpg”、“/images/0002.jpg”一一无效。
失效可能很昂贵。
- 使用Amazon Cloud Front,免费有1000个请求,然后每个请求0.005 USD,
- 每次GCP Cloud CDN请求的费用为0.005美元(首次付款)
禁用似乎在Azure CDN中是免费的。
“使用gzip等CDN压缩”的详细说明
关于原始的gzip等压缩
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原始压缩,例如gzip | ◯ | ◯ | ◯ |
如果原始服务器最初支持gzip压缩等,则当客户端(浏览器)将带有Accept-Encoding:gzip的请求传递到原始服务器时,原始服务器将返回响应标头Content-Encoding:gzip并返回响应返回压缩后的正文。
另一方面,如果客户端(浏览器)在不接受Accept-Encoding:gzip的情况下请求源,则源将返回未压缩的内容。
在这种情况下,如果CDN进入客户端和原点之间会怎样?无论通过Amazon CloudFront,Azure CDN还是Google Cloud CDN,它都会适当地中继标头并如上所述正确地工作。
关于CDN中的gzip等压缩
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
CDN中的压缩,例如gzip | ◯ | ◯ | × |
在某些情况下,“原始服务器不保存压缩内容,但希望CDN代表执行压缩”。
此功能可用于Amazon CloudFront和Azure CDN。截至2019年4月,Google Cloud CDN似乎尚未实现。
“原域名”的详细说明
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原始域设置(http) | ◯ | ◯ | ○ |
原始域设置(https / SSL) | ◯ | △(仅限标准Verizon,Premium Verizon) | ? |
关于原始域设置(http)
前提条件是,在配置CDN时,将分配您自己的FQDN。对于CloudFront,它会自动设置为d123456abcdef.cloudfront.net等。对于Azure CDN,请自行输入示例部分,例如example.azureedge.net(其他人未使用的字符串)需要寻找)。
如果上述FQDN没问题,则可以按原样使用它,但是如果您有一个名为myservice.net的域,则需要使用cdn.myservice.net的FQDN。
关于原始域设置(https / SSL)
“限制公开”详细说明
关于每个国家/地区的公开范围设置
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
每个国家/地区的可用性设置 | ◯ | ◯ | × |
对于具有权利所有者的视频或图像内容,您可能希望将分发目的地限制为“仅限日本”。
Amazon CloudFront允许您按国家/地区允许或拒绝。由于可以选择白名单或黑名单,因此可以轻松设置“仅允许日本”或“拒绝该国家和地区”。但是,由于这些设置是整个CloudFront的通用设置,例如,“如果您希望能够看到普通页面,但只希望将内容/仅限于日本使用”,请创建另一个新的CloudFront设置需要成为
即使使用Azure CDN,您也可以通过白名单/黑名单方法进行定义,但是比AWS可以通过“ / contents”之类的路径进行控制要好。
Google Cloud CDN似乎不允许使用特定国家/地区的控件。
关于签名的URL(限时URL /一次性URL)
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
签名的URL(有时间限制的URL /一次性URL) | ◯ | △(仅限Verizon提供) | ○ |
签名的URL也称为术语限制URL或一次性URL。您可能需要设置一个最后期限,说“该内容只能在N小时内下载”,但是通过签名的URL可以完成。
Amazon CloudFront和Google Cloud CDN支持签名的URL。Azure CDN仅是Verizon的Premium(不提供Standard)。
下面介绍什么是签名URL。
例如,在视频分发系统中,通常使内容URL的到期日期保持非常短。这使得可以认识到即使将视频文件的URL粘贴在公告板上等,当其他人看到它时,该URL也会过期。在实践中很难发现这是一种缓解风险的方法。)
首先,如果要管理截止日期,可以按以下步骤进行操作。
- 发出唯一的ID。在该系统中,ID和有效期信息被存储在DB等中。
- 在网址中指定download?ID = xxxxxxxx。
- 每次访问时,它都会根据ID引用内部数据库,并检查其是否在时限内。
- 如果在时限内,则返回内容。如果时间期限已过,将发生错误。
但是,上述方法需要一个应用程序来检查和确定数据库中的数据。如果像视频分发一样,需要大规模访问,这还不够。另外,由于我们要通过CDN进行分发,因此我们希望CDN确定是否在截止日期之内。
另外,有些人今天观看相同的视频内容,另一些人明天观看,因此无法在时间到时删除内容本身。您希望对于今天在12:00观看的用户来说直到12:05,对于明天在12:00观看的人们明天到12:05。
因此,让我们将到期时间戳秒数附加到URL,例如download?Expires = 123456789012,以便CDN可以检查到期日期。在CDN端,如果expires值不超过当前时间,则可以,如果已过期,则这是NG的简单逻辑。
您可能会想,“如果您增加该URL的过期值,任何人都可以查看该URL吗?” 因此,作为对策,请附加整个URL的“签名”。
在公共密钥加密中,使用秘密密钥对下载进行加密?Expires = 123456789012,并将其添加到末尾。换句话说,它看起来像下面的样子。
download?expires=123456789012&signature=jxcGpgMxAJrhF4QMhPrSSZaT7A(略)
签名可以通过CDN端的公钥进行验证。因此,如果仅修改expires的值,签名将失败,因此将为NG。为了使签名验证成功,用密钥加密新的expires值就足够了,但这是不可能的,因为普通用户没有密钥。
因此,签名URL的原始使用期限是为了确保URL参数正确,并且仅是一种使用。
使用Amazon CloudFront,除了到期日期设置外,您还可以设置“任何时候都可以查看”和“如果IP地址为…,则可以查看”。
关于基本/摘要式身份验证
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
基本/摘要式身份验证 | △(可以中继到原点) | ? | ? |
“错误显示”详细说明
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
自定义错误显示 | ◯ | × | × |
错误页面TTL规范 | ◯ | × | × |
如果原点返回404或503错误,则CDN将显示干燥的英语错误屏幕。如果可以,那么可以,但是可能会有诸如“我真的想输出日语”之类的请求。另外,有这样的要求:“即使拥挤不可避免地变成503,用户也会对毫无意义的英文页面感到生气,因此至少我想对情况和道歉词进行描述。”
Amazon CloudFront允许您指定自定义期间显示的HTML。此时,可以为每个响应代码指定该页面用于404,为该页面指定503等(换句话说,单独定义每个响应代码很麻烦)。您还可以转换响应代码,例如指定错误页面的TTL(300秒,缓存5分钟),或者如果源返回403,则以404返回给用户。我不知道)。
Azure / Google没有此功能。
其他
原点超时设置
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
原点超时设置 | 4-60秒 | × | × |
关于原始标题设置
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
自定义标题设置 | ◯ | Premium可以吗? | ×? |
禁止直接获取原产地
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
禁止直接获取原产地 | ◯ | ? | ? |
关于“禁止直接获取原产地”。如果分配给CDN的域是www.example.com,而源是www-internal.example.co.jp,我们希望避免直接访问www-internal.example.co.jp。
额外的负载放在原始服务器上。另外,要使其在CDN和原始位置上均能正常工作是非常困难的,即使正确地工作,验证工作也会加倍。在这种情况下,Amazon CloudFront可以使用您自己的标头向您的来源发送请求,例如您自己的自定义标头“ X-CDN-From:hogehoge”。另一方面,在源头中,如果标头在Apache或Nginx等中不存在,则将其设置为直接访问并被拒绝。
关于查询字符串设置
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
查询字符串设置 | ◯(白名单/黑名单) | △(忽略查询,不与查询一起缓存,将查询视为单独的内容,只是其中之一) | ◯(白名单/黑名单) |
关于CDN中的TTL指定
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
CDN中的TTL指定 | (可以被CDN覆盖) | ×(需要在原点进行设置) | ×(需要在原点进行设置) |
关于预缓存(预取)
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
预缓存(预取) | × | ◯(仅限标准Verizon,Premium Verizon) | × |
关于多来源
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
多源 | ◯ | ×? | ◯ |
关于IP地址
– | 亚马逊CloudFront | Azure CDN | Google Cloud CDN |
---|---|---|---|
IP地址 | 多个 | 多个 | 单个IP地址 |
Amazon CloudFront / Azure CDN各自提供了一系列IP地址,而CDN服务在其中提供了多个IP地址。
另一方面,Google Cloud CDN的每个CDN配置仅使用一个IP地址。即使在不同的区域中,这也是一个IP地址。琐碎的一点是,Google Cloud CDN的易于操作性将得到更好的服务。
关于“可能发生安全事件”
当由nginx或Apache代理等设置内部缓存时,它是相同的,不限于CDN,而是将其写为警报。
2017/06,Mercari在切换CDN时做到了(详细信息)。
以下是一个简短的摘要。
- 具有个人信息的页面(例如“我的页面”)未缓存在CDN上(具体来说,“缓存控制”:未输出缓存)。
- 我们切换到了与以前使用的CDN不同的CDN。
- 使用新的CDN,Cache-Control:no-cache不会从缓存中排除。
- 我的页面已被缓存,因此我可以浏览其他人的个人信息。
另一个常见的错误是缓存包含会话ID的Set-Cookie标头。结果,可能会接收到另一个人的会话ID,并且在下一次访问中会将用户视为另一个人。
默认情况下,CloudFront不会中继Cookies和Set-Cookies,但您可以对其进行配置。如果包含Set-Cookie标头,则GCP Cloud CDN不会缓存。但是,如果您在主体中使用Javascript设置Cookie,则CDN无法检测到它,因此可能会设置其他人的Cookie。
尽管据说“让我们理解CDN的规范”和“注意cookie的发行”,但是您首先应该仔细考虑“动态页面是否应该通过CDN”。
动态页面还具有通过CDN的优势。例如:
- 让CDN进行SSL解密
- 我想要CDN中的DDoS措施
- 为了降低DNS名称解析的速度,我们希望尽可能减少其他FQDN,例如img.XXXXX.net
- 我想进行细粒度的控制,例如缓存几分钟,即使它是一个动态页面
但是,这样做的代价是,如果您没有正确管理缓存的对象和非缓存的对象,则可能发生信息泄漏。在决定之前,请仔细考虑优缺点。