有关Amazon CloudFront

之前我有几篇介绍Amazon云服务的文章。在发布这些文章之后,很多人曾咨询过有关CloudFront的一些问题,再加上最近CF服务有所变化,因此这里单独撰文,对这些常见问题和新的改进进行一些介绍。

CloudFront不能做什么?

首先最重要的一点,CF不能脱离原本的Web服务器单独使用。有筒子曾经问过,能否直接将整个网站的所有文件都保存到S3中,然后通过CF进行加速,并通过CF的域名和地址进行访问这样是不行的

CF只能充当静态文件的缓存,例如网页上包含的CSS、脚本、图片、音频,以及视频内容。但现在纯粹的静态网站已经很少了,大部分都是使用了PHP、ASP等技术的动态网站,需要涉及到数据库操作,而数据库是不能托管在S3上,也不能使用CF加密的,因此原始Web服务器依然需要存在。

如果你的网站是纯静态站点,可以考虑将所有文件都保存到S3中一个专用Bucket中,然后针对该Bucket启用“网站”功能,并指定默认文档:

让S3的Bucket成为一个“虚拟主机”

当然,随后还需要分配权限,针对这个Bucket,为“Everyone”分配“读取”权限:

分配公开网站所必需的权限

接着当然还需要修改域名指向,具体来说,需要在DNS上创建一条CNAME记录。假设有一个域名 www.example-bucket.com,那么就可以创建一个名为 www.example-bucket.com 的Bucket,然后添加一条CNAME记录,指向 www.example-bucket.com.s3-website-<地区代号>.amazonaws.com。这样所有到 http://www.example-bucket.com 的请求都将被指向 www.example-bucket.com.s3-website-<地区代号>.amazonaws.com  。这一话题的详细信息可以参考这里

这一过程完整的做法和相关事项可以参考官方文档

但上述做法只能用于静态网站,如果你的网站使用动态网页技术,并且需要读写数据库,那就无法这样做。

不再要求S3作为Origin

在我写之前那几篇文章的时候,CF还必须使用S3,也就是说,需要首先将需要缓存的内容都从原始网站复制到S3的专用Bucket中,随后CF服务才能在某个文件首次被请求的时候,从S3中读取,并缓存在CF遍布全球的服务器中。

不过最近的一次更新已经彻底取消了这一要求,不再借助S3的中转,CF可以直接从原始Web服务器读取内容。具体信息可参考这里

简单来说,在创建分发的时候,只需要指定创建“Custom Origin”,设置Origin  DNS Name为原始网站的完整域名(例如本站就是“www.xieyidian.com”),接着设置CNAME(例如本站使用的是“cdn.xieyidian.com”),并指定正确的默认根对象,即可:

直接使用原始网站作为Origin

只要设置无误,不再需要其他任何设置,即可正确使用CF对原始网站进行加速,并且这一过程不再需要使用S3。

分享:

《有关Amazon CloudFront》有22个想法

    1. 就是这篇文章里列出的方法啊,WordPress这边不需要修改任何设置,所有设置都是在Amazon的CF后台进行的。你现在遇到的具体问题是什么呢?能否详细说说?

  1. 我在CF里面建立了一个 fast.liuyouhui.com的发布 orion添的是www.liuyouhui.com CNAMEs是

    fast.liuyouhui.com

    然后我到DH的CF后台,想添加fast.liuyouhui.com,但DH出错,说:

    Invalid: this Amazon account info is invalid or is not signed up for CloudFront!

    我很晕啊。

  2. 对,我刚才把这一点给忘了。

    需要在你的域名服务器,例如DH那里添加,CNAME为fast,值为“XXXXXXX.cloudfront.net.”,XXXXX可以在CF的后台看到,“.net”后面还有一个点。

  3. 有个疑问?不用S3,直接设置自己的网站,这样用户请求下载量比较大的情况下会不会对自己的网站造成太大的压力?

  4. 不会的,只有在用户首次访问一个文件的时候,CF才从来源服务器下载,随后文件就会保存到CF自己的服务器中,只要文件没有变化,后续的所有请求都通过CF的缓存直接提供。这才是CDN的真正含义啊。

    你只要建立一个分发,例如cdn.site.com,然后把文件发布过去,并修改客户端,让客户端使用cdn.site.com/file.zip之类的地址下载更新,就可以自动通过CF获得内容了

  5. 之前使用S3+cf,测试过程中发现,文件更新后,从cf下载回来的文件是旧的。查了下,看到网上有人说cf会延时24小时。有这种情况?还是我设置有问题?

  6. 估计这取决于你把更新文件发布到S3的具体方法吧。我这里主要把CF用作本网站的CDN,直接从网站原始服务器读取数据,不通过S3,每次发布新文章后,文章的图片内容在一分钟内就可以正确显示了,没有太长的延迟

    所以你先绕过S3,试试看直接用你自己的网站作为来源吧

  7. 试了一下确实有延时。新发布的不会,覆盖提交的会。http://www.subchild.com/2010/09/17/amazon-cloudfront-php-invalidator/有找到一个用php写的工具可以没调试通过。
    提示如下错误:
    CloudFront: Invalidating Object: /config/MD5Value.xml
    2010-08-01/distribution//invalidation
    body: /config/MD5Value.xml1318299225
    response: 1
    response string:

    404 Not Found

    Not Found
    The requested URL /2010-08-01/distribution//invalidation was not found on this server.

    Apache/1.3.29 Server at localhost Port 80

    response code: 404

    可以帮忙看看?

  8. 楼主能否告知下您的Amazon EC2 配置,以及访问量, 我现在在弄Amazon 的EC2 不知道各种配置的机器能够撑住的并发量,谢谢。

    [WORDPRESS HASHCASH] The poster sent us ‘0 which is not a hashcash value.

    1. 抱歉,我始终没有用过 EC2,只是用 AWS 的其它服务,而且现在这些服务都已经不再使用了。所以帮不上你什么忙啦

发表评论

电子邮件地址不会被公开。 必填项已用*标注

发表评论前,先做个简单的数学题吧: * Time limit is exhausted. Please reload CAPTCHA.