更新时间:2022-07-18 19:42:53
CDN Pro支持与AWS S3配合使用,实现资源云端加速分发与存储。特别地,CDN Pro支持访问私有AWS存储桶。以下我们将以一个简单的示例为您介绍如何在AWS和CDN Pro上配置实现AWS S3存储桶加速。
假设我们有一个域名waytoo.digital
,并且我们希望在名为files.waytoo.digital
的子域名上设置一个 Amazon Web Services (AWS) 存储桶,以便用户可以通过该子域名访问该存储桶中的文件资源。
以下我们将为您介绍如何创建并访问公开 AWS 存储桶,然后我们将进一步介绍如何访问私有 AWS 存储桶。
输入以下存储桶名称(合法的存储桶 DNS 前缀):files-waytoo-digital
。
单击下一步“Next”。
跳过配置选项“Configure options”。
默认勾选阻止所有公开访问的权限 “Block all pubilc access”(创建存储桶的时候,AWS默认会希望您创建一个私有桶,你可以在创建完后将其设置为公开从存储桶;否则,AWS 会阻止您继续下一步“Next”)。
单击下一步“Next”,然后单击保存“Save”。此处您已成功创建您的存储桶。
为刚创建的存储桶适当地分配内容访问控制权限。权限配置面板“Permissions”如下:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Amazon S3 默认会按照一定的格式生成访问存储桶文件的URL,您可以看到我们得到的文件URL是 https://files-waytoo-digital.s3.amazonaws.com/file_1m.bin
。其中,对Amazon S3文件的访问域名格式一般为:<BUCKET_NAME>.<REGION>.amazonaws.com
,在此处的示例中,Amazon S3 没有返回区域,而是返回S3
。但无论如何,我们可以使用这个存储桶域名来作为 CDN Pro的回源访问地址,稍后我们将会使用到这个域名 files-waytoo-digital.s3.amazonaws.com
。
登录CDN Pro控制台。并按照我们在快速入门这篇文章中介绍,开始逐步配置并验证测试加速项目。
files-waytoo-digital.qtlcdn.com
。$ping files-waytoo-digital.qtlcdn.com
PING files-waytoo-digital.qtlcdn.com (14.0.119.186): 56 data bytes
64 bytes from 14.0.119.186: icmp_seq=0 ttl=56 time=3.775 ms
64 bytes from 14.0.119.186: icmp_seq=1 ttl=56 time=3.953 ms
64 bytes from 14.0.119.186: icmp_seq=2 ttl=56 time=3.739 ms
64 bytes from 14.0.119.186: icmp_seq=3 ttl=56 time=4.733 ms
files.waytoo.digital
;3)单击“保存”按钮以保存配置并创建一本新证书。Host
头部来匹配加速加速域名,以读取加速项目配置来进行加速分发。aws_origin
,稍后我们将会在边缘逻辑配置中引用这个源站;2) “主机名/IP地址” :设置添加AWS S3存储桶的访问域名 files-waytoo-digital.s3.amazonaws.com
,并点击 “验证” 按钮,验证源站的联通性;3)“Host请求头” :展开 “高级配置” ,在 “Host请求头” 字段中填写 files-waytoo-digital.s3.amazonaws.com
;4)点击“保存” 按钮,即成功创建了Amazon S3 Bucket源。注意:HOST请求头必须配置为Amazon S3 Bucket的文件访问域名,如果缺省该配置,则CDN Pro回到Amazon S3存储桶源的请求HOST头将会默认携带加速域名
files.waytoo.digital
,此时Amazon S3 存储桶将会响应错误 “Bucket not found” 。
aws_origin
;2)指定路径缓存中,我们新增勾选强制忽略来自源站的请求头,以控制CDN Pro上的缓存行为;3)点击“确定”按钮完成缓存模板导入,此时您就可以在边缘逻辑编写器中看到边缘逻辑脚本(您也可以自行配置编辑此脚本以符合您的业务预期)。<kbd></kbd>
location / {
proxy_cache_bypass 1;
proxy_no_cache 1;
origin_pass aws_origin;
}
location ~* \.(exe|wmv|mp3|wma|ogg|swf|flv|mp4|avi|mpg|mpeg|f4v|rmvb|rm|3gp|img|cur|gif|png|jpe|ico|bmp|jpeg|jpg|rpm|deb|tar|gz|bin|bz2|zip|rar|ipa|apk|jar|sis|xap|msi|cab|7z|pdf|doc|docx|xls|xlsx|ppt|pptx|txt|css)$ {
set $cache_misc $cache_misc$sorted_querystring_args;
if ( $args = '' )
{ set $cache_time 24h; }
else
{ set $cache_time 10m; }
proxy_cache_valid 200 206 $cache_time;
proxy_ignore_headers Expires Cache-Control Set-Cookie;
origin_pass aws_origin;
}
location ~* \.(html/htm/js)$ {
set $cache_misc $cache_misc$sorted_querystring_args;
if ( $args = '' )
{ set $cache_time 12h; }
else
{ set $cache_time 0m; }
proxy_cache_valid 200 206 $cache_time;
proxy_ignore_headers Expires Cache-Control Set-Cookie;
origin_pass aws_origin;
}
location ~* \.(shtml/html/htm/js)$ {
set $cache_misc $cache_misc$sorted_querystring_args;
if ( $args = '' )
{ set $cache_time 12h; }
else
{ set $cache_time 0m; }
proxy_cache_valid 200 206 $cache_time;
proxy_ignore_headers Expires Cache-Control Set-Cookie;
origin_pass aws_origin;
}
要在演练环境中测试,您应该知道演练环境服务器的 IP 地址,您可以通过以下指令获取:
$ dig staging.qtlgslb.com
...
;; ANSWER SECTION:
staging.qtlgslb.com. 59 IN A 163.171.228.89
staging.qtlgslb.com. 59 IN A 163.171.230.47
...
选择一个返回的 IP 地址,并检查我们配置和部署的内容是否能正常工作,如果正常工作,则第一次访问,CDN Pro会回到Amazon S3源站获取内容并缓存,同时正常响应200给客户端。
❯ curl -I https://files.waytoo.digital/file_1m.bin --resolve files.waytoo.digital:443:163.171.228.89
HTTP/2 200
content-type: application/octet-stream
content-length: 1024000
x-amz-id-2: eQa0SXtgPk3A+jASSyarZLw6FgFtXg+7m+Br6Xr/YBXQ0aot/dBTKBf5QSoE0x8TwzqBKXJ+MBw=
x-amz-request-id: 4Z0SEN8YER8PBYAG
date: Fri, 16 Oct 2020 03:30:16 GMT
last-modified: Fri, 16 Oct 2020 02:36:45 GMT
etag: "fcaebe20d9b3e73086dcb0ba5def8e52"
x-cache-status: MISS
x-qtl-request-id: 4c394e8fd8cc514c5f1e437ac3daf969
x-via: 2.0 na-us-iad1-cache-0003 [MISS 200]
age: 19
server: QTL_Cache/1.2.03
accept-ranges: bytes
再次请求相同的项目,因为在第一次请求测试中,CDN Pro上已经有对应的缓存资源,因此我们将看到缓存状态为为命中 “HIT”。
❯ curl -I https://files.waytoo.digital/file_1m.bin --resolve files.waytoo.digital:443:163.171.228.89
HTTP/2 200
content-type: application/octet-stream
content-length: 1024000
x-amz-id-2: eQa0SXtgPk3A+jASSyarZLw6FgFtXg+7m+Br6Xr/YBXQ0aot/dBTKBf5QSoE0x8TwzqBKXJ+MBw=
x-amz-request-id: 4Z0SEN8YER8PBYAG
date: Fri, 16 Oct 2020 03:30:16 GMT
last-modified: Fri, 16 Oct 2020 02:36:45 GMT
etag: "fcaebe20d9b3e73086dcb0ba5def8e52"
x-cache-status: HIT
x-qtl-request-id: dfa55f3549ee4fd0824472f83d06c6c5
x-via: 2.0 na-us-iad1-cache-0003 [HIT]
age: 13
server: QTL_Cache/1.2.03
accept-ranges: bytes
以上我们测试配置按预期工作,因此我们可以将它部署到生产环境中。
要将配置部署到生产环境,需要先到证书页面和加速项目页面下,分别将其部署到生产环境中。
在我们将域名的用户访问流量引流到CDN Pro生产环境之前,我们可以先在生产环境中检查配置是否如期运行,若响应正常,则恭喜您已成功将加速项目部署到生产环境中:
❯ curl -I https://files.waytoo.digital/file_1m.bin --resolve files.waytoo.digital:443:14.0.119.186
HTTP/2 200
content-type: application/octet-stream
content-length: 1024000
x-amz-id-2: gdpoBl4Uk1FbJ6i8tMHXYZRcPxAAR9NTY/EziqHr6Kbrni887rU+suUINzNof4sltrCRCq4I4TE=
x-amz-request-id: C30F30F6BE2B081E
date: Fri, 16 Oct 2020 03:21:14 GMT
last-modified: Fri, 16 Oct 2020 02:36:45 GMT
etag: "fcaebe20d9b3e73086dcb0ba5def8e52"
x-cache-status: HIT
x-qtl-request-id: 16a3be4dfdc381e44b90c86bec087f47
x-via: 2.0 as-kr-icn1-cache-0003 [HIT]
age: 5575
server: QTL_Cache/1.2.03
accept-ranges: bytes
测试业务如期运行之后,我们可以创建/更改域名的 DNS CNAME 记录,并将其指向我们之前创建的边缘调度域名 files-waytoo-digital.qtlcdn.com
。
❯ dig files.waytoo.digital
...
;; ANSWER SECTION:
files.waytoo.digital. 299 IN CNAME files-waytoo-digital.qtlcdn.com.
files-waytoo-digital.qtlcdn.com. 19 IN A 14.0.119.186
...
到这里,所有访问域名 files.waytoo.digital
的请求都会经过CDN Pro进行加速分发,并回源到Amazon S3 Bucket files-waytoo-digital.s3.amazonaws.com
获取文件资源!
前面我们已经创建一个公开的存储桶并实现对其上文件资源的加速分发。现在,让我们将这个存储桶设置为私有存储桶,并设置允许 CDN Pro 来访问它。
前面我们将存储桶设置为公开的存储桶。现在,我们想将存储桶设置为私有存储桶,以限制费授权的外部请求访问存储桶的资源。我们回到AWS S3的存储桶配置页面中,在权限设置页面下(Permissons),勾选阻止所有公开访问的权限 “Block all pubilc access”,以将存储桶设为私有桶。此时,从私有桶获取文件资源时,需要携带秘钥,AWS S3鉴权通过后才会允许访问。
现在我们可以编辑我们的加速项目,并设置AWS S3回源鉴权。在此之前,您需要先自行从AWS S3上了解并获取如下信息:
在加速项目页面,选择您之前创建配置的加速项目,克隆出一个新的版本。
编辑这个版本,并编辑修改前面设置的 aws_origin
源站。
在源站高级配置中,我们开启配置AWS S3回源鉴权:1) “认证”:选择为 AWS S3
选项;2)“地区”:选择我们创建的AWS S3 Bucket的存储地区;3)“Access Key”:填写AWS S3 访问密钥ID;4)“Secret Key” :填写AWS S3 访问密钥加密串。填写完成后点击“保存”按钮。
curl -I https://files.waytoo.digital/file_1m.bin --resolve files.waytoo.digital:443:163.171.228.89
HTTP/2 200
content-type: application/octet-stream
content-length: 1024000
x-amz-id-2: oTixActu2B9rtfEvOUDkmelQxPIgFYfRdC4T950YuXL/tv7Zu+pSHgkCXiAuouaRpjLpqTyf3xE=
x-amz-request-id: AQ7S4P0H1K0H0R9G
date: Fri, 16 Oct 2020 09:04:34 GMT
last-modified: Fri, 16 Oct 2020 09:04:10 GMT
etag: "fcaebe20d9b3e73086dcb0ba5def8e52"
x-cache-status: HIT
x-qtl-request-id: 105b10794ee438213fac428c0ef60379
x-via: 2.0 na-us-iad1-cache-0003 [HIT]
age: 16
server: QTL_Cache/1.2.03
accept-ranges: bytes
到这里,就完成了我们的AWS S3私有桶配置,并实现其资源的加速分发。