什么是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服务

例如,有一天 分析Gigazine页面,它  看起来像这样:

  • 总大小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
  • 我想进行细粒度的控制,例如缓存几分钟,即使它是一个动态页面

但是,这样做的代价是,如果您没有正确管理缓存的对象和非缓存的对象,则可能发生信息泄漏。在决定之前,请仔细考虑优缺点。