是否需要在外部网站上做些什么来配置 AWS Cloudfront?

Is there something needs to be done in external website to configure for AWS Cloudfront?

我有 https public 面向 linodes 网络托管公司托管的网站。我在我的 AWS 账户中为此网站创建了 Cloudfront 分发,但它没有显示 activity,就好像什么都没发生一样。我需要对我的网站做些什么吗? 如果是这样,我到底需要做什么?

假设我的分发的云端 url 是 abcxyz.cloudfront.net,我的网站是 mysite.com,即 https 网站。

已添加:

没有 activity 我的意思是当我转到 mysite.com 时,我的云端分发中没有生成任何数据或日志,这意味着内容来自 mysite.com 而不是来自云端缓存。当我转到 abcxyz.cloudfront.net 时,它显示 mysite.com.

的内容

mysite.com 是动态 java 网站,html 内容是动态生成的,用户可以与 mysite.com 上的搜索功能进行交互。这是一个显示大量房产图片的房地产网站。所有图像 urls 都是动态生成的,看起来像 https://www.mysite.com/photos/properties/5eef42ca5366c1485ad8693c/thumb/2500-feet-4.4-residential-for-sale-DSC_0001.JPG

登录 Linode.com(我的网络托管公司)后,我尝试在 CNAME DNS 设置中添加 CNAME 记录 (abcxyz.cloudfront.net),但没有任何区别。

它已经超过 2 周了,这个云端分布仍然没有所有指标,而 mysite.com 每天有 2 或 3 个来自世界各地的访问者。

只有托管公司允许您进行 DNS 管理,您才能这样做。(如果是,那么您可以这样做)。检查您的真实服务器 URL。 (或者在您的域映射的 DNS 中)一旦您拥有该值,您需要尝试使用该来源创建 Cloudfront 分配。并将域映射到 Cloudfront url.

或者您可以将 DNS 管理移动到 Route 53。您必须在 Route 53 记录中创建多个记录。让我解释一下。

  1. 您需要创建一个 public 托管区域。(您将获得名称服务器)并在 DNS 管理中创建名称服务器映射 (mysite.com)
  2. 您需要将 Mysite.com 映射到 CloudFront 分配。 稍后您需要将网站的托管 link(基本上是 public 服务器)映射到 CloudFront Origin。
  3. 如果这不可能,您需要创建一个与您的域相同的 S3 存储桶,并将所有存储桶重定向到真实服务器的 public URL。

谢谢

阿希什

我决定删除我原来的答案,并根据我刚才所做的一步一步地告诉你该怎么做。我创建了两个相同的网页,名为 fast.html 和 slow.html;他们唯一做的就是加载 9 张非常大的图像,我从这里 https://effigis.com/en/solutions/satellite-images/satellite-image-samples/ 得到的,总计 335 兆字节。 slow.html 网页将从我机器上的图像目录加载图像。 fast.html 网页将从 CloudFrond 分发加载图像,后者又从我将图像上传到的 S3 存储桶中获取图像。所以,一步一步来。

  1. 创建一个名为 cf-big-images 的 S3 存储桶,并在该存储桶内创建一个名为 images 的文件夹

  2. 将图像上传到存储桶。我使用命令 aws s3 cp . s3://cf-big-images/images --recursive

    从我的 Apache Web 服务器根目录中的图像文件夹中复制了它们
  3. 进入S3存储桶中的图片文件夹并制作它们public;这是为 public.

    设置的只读
  4. 在 CloudFront 中创建一个分配。您只需要填写“源域名”字段。单击该字段,您将在“cf-big-images.s3.amazonaws.com”处看到您的 S3 存储桶; select吧。 [注意:我原来的消息有误]

  5. 就是这样。单击“创建分发”并等待。这需要相当多的时间。

  6. 更改 fast.html 网页。在我的 slow.html 页面上,我有:

<img src="images/Img15.jpg">
<img src="images/Img16.jpg">
<img src="images/Img17.jpg">
<img src="images/Img18.jpg">
<img src="images/Img34.jpg">
<img src="images/Img41.jpg">
<img src="images/Img48.jpg">
<img src="images/Img58.jpg">
<img src="images/Img100.tif">

在 fast.html 网页上我有:

<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img15.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img16.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img17.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img18.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img34.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img41.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img48.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img58.jpg">
<img src="https://d1pqzepyfmpq4.cloudfront.net/images/Img100.tif">
  1. 然后,每次都清除缓存,我导航到 slow.html 和 fast.html 页面以 运行 进行一些测试; CloudFront 似乎明显更快,但这不是受控测试。以下是一些图片:

希望它现在有意义。

一般流程应该是这样的:

  1. 用户访问站点 https://example.com
  2. example.com 解析为 yourcdn.cloudfront.net
  3. cloudfront 检查规则(这里有很多要展开的内容,但我们假设它是 可缓存的内容
  4. cloudfront 代表用户访问您站点的服务器并存储返回的 内容
  5. cloudfront 然后 returns 对用户的响应

对于下一个用户,步骤 1、2、3 和 5 是 运行。您的网站不再获得流量。

这是此设置所需的内容

  1. DNS www.example.com 和@.example.com 指向 yourcdn.cloudfront.net

万维网

  • www 只是一个 CNAME,游戏结束

@

  • @ 是顶点域,如果你不使用 aws 的 route53

    ,这是棘手的部分
  • @ 只接受 A 记录,而您的云端入口点没有。

  • @ 如果您使用的是 Route53,aws 会为您提供 ALIAS CNAME,从而解决这个难题

  • 如果您不使用 Route53,事情会变得更加复杂。您将必须找到一种方法(托管服务或第三方)让您将 @.example.com 指向他们的 IP,然后重定向到 www.example.com

  • 你可以有一个只重定向到 www.example.com

    的静态 nginx 规则
    server {
        server_name example.com;
        return 301 $scheme://www.example.com$request_uri;
    }
    

这并不能解决每个人的问题,在少数情况下,人们还使用 CDN 分发作为 Internet 的屏蔽,这可以称为 WAF(Web 应用程序防火墙)并且应该让您保持良好状态并远离互联网怪物,在某些情况下,因为云端 + aws 可以为您提供一些额外的保护、流量过滤等。放弃您的服务器 IP 用于顶级域,有点违反了这种方法。

现在,您已准备好接收流量。并定义规则!哪个是好玩的部分。

待续