标签: amazon-cloudfront

AWS CloudFront 默认根对象和子目录

我正在 S3 和 CloudFront 上托管 Jekyll 博客。在 S3 上设置默认文档工作正常,所有子文件夹本机都转到 index.html。

在我的 CloudFront 发行版中,我已将默认根对象设置为 index.html,但子目录没有得到这个 - 相反,我收到以下错误

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>about</Key>
<RequestId>F8324894C093EB53</RequestId>
<HostId>
Girhbo7YLEl9sxPS3KjvhbkpL32qNsYgiVLElAhPOvqrekfqfpJ/2AAYRg4rNJ+t4Imc86cjiw4=
</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

如果我手动浏览到 domain/subdir/index.html 它工作正常。

有任何想法吗?

amazon-s3 amazon-cloudfront amazon-web-services

6
推荐指数
1
解决办法
3067
查看次数

AWS Cloudfront + 负载均衡器,url 从主域更改为负载均衡器子域

我的设置如下:

  1. 用户在浏览器上输入 example.com
  2. 请求转到 AWS CloudFront,后者将 HTTP 重定向到 HTTPS,并将请求转发到 AWS Elastic LoadBalancer (elb.example.com)
  3. LoadBalancer 将请求转发到运行 PHP Laravel 框架的 EC2 实例
  4. EC2 正常响应
  5. 用户在 example.com 上正确查看页面,其他一切对他来说都是透明的

所有这一切都是我想要的,但是......

  • 如果用户导航到页面上的任何按钮,浏览器上的 url 将变为 elb.example.com(它应该保持 example.com)
  • 如果我去查看页面源代码,页面上任何按钮的所有链接都有 elb.example.com 的基本网址(应该是 example.com)

原因是因为 EC2 看到来自负载均衡器的请求,因此它假定基本 url 是 elb.example.com 并相应地生成所有链接。

如何让 EC2 将基本 url 视为 example.com ?

domain-name-system load-balancing cdn amazon-cloudfront amazon-elb

6
推荐指数
1
解决办法
2万
查看次数

为什么 CloudFront 提供的 S3 存储桶中只有 index.html 可用,而没有其他内容?

我正在尝试通过 CloudFront 公开 S3 中托管的静态站点。

S3 存储桶( testyop1) 设置为托管静态网站(非公共模式),其存储桶策略为

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E...."
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::testyop1/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

网站托管配置声明这index.html是索引文档。

在 CloudFront 端,源域名设置为testyop1.s3-website-eu-west-1.amazonaws.com没有任何源路径。该名称取自 S3 网络托管配置(不带http://)。

我可以访问https://xxxxx.cloudfront.net, 以及https://xxxxx.cloudfront.net/index.html(其中 xxxxx 是 CloudFront 生成的名称)

所有其他调用https://xxxxx.cloudfront.net失败

403 Forbidden

Code: AccessDenied
Message: Access Denied
RequestId: F...D
HostId: i...V4X7l4=
Run Code Online (Sandbox Code Playgroud)

尽管.html存在文件(在根目录和子目录中)。

该错误消息是否来自 …

amazon-s3 amazon-cloudfront amazon-web-services

6
推荐指数
1
解决办法
3216
查看次数

如何限制仅从自定义源服务器访问 cloudfront?

如果我理解得很好,为了创建自定义源分发,我需要在我的自定义源服务器上公开这些文件。

就我而言,这会将这些文件放入 apache 服务器的公共目录中。我的问题是,是否可以将对该 apache 服务器的访问限制为仅限于 cloudfront?

我知道如何做到只允许一个 ip,但是,如何使用 cf 做到这一点?

提前致谢!

amazon-cloudfront

5
推荐指数
1
解决办法
5659
查看次数

如何在 S3 中存储 Cloudfront 自定义错误页面?

我在 AWS 负载均衡器上插入了 Cloudfront。

我在 AWS 文档中看到我可以自定义 Cloudfront 自定义错误页面。我尝试按照 AWS 文档中的建议将这些错误页面存储在 S3 中,但它不起作用。文档说:

We recommend that you store custom error pages in an Amazon S3 bucket even if you're using a custom origin. If you store custom error pages on an HTTP server and the server starts to return 5xx errors, CloudFront can't get the files that you want to return to viewers because the origin server is unavailable.
Run Code Online (Sandbox Code Playgroud)

我的错误页面位于 S3 中,路径为“my-app-bucket/errorpage.html”。

我尝试在 Cloudfront 配置中链接此文件,但出现以下错误:

Cloudfront自定义错误页面配置

如果我尝试使用值 /my-app-bucket/errorpage.html,Cloudfront 会将请求重定向到我的 ELB 源,然后我得到 …

amazon-s3 amazon-cloudfront amazon-web-services

5
推荐指数
1
解决办法
6477
查看次数

如何路由具有多个源的 Cloudfront?

所以我有 2 个 Wordpress 网站是这样托管的

  • http://siteA.mydomain.com
  • http://siteB.mydomain.com

我创建了一个发行版,该发行版以上述 2 个域为原点。

  • siteA.mydomain.com
  • siteB.mydomain.com

我不确定如何配置路由,使其 http://siteA.mydomain.com/wp-content/*进入站点 A 的域,并http://siteB.mydomain.com/wp-content/*进入站点B,因为路径模式相同。

还是我应该为 siteB 创建另一个发行版?

amazon-cloudfront

5
推荐指数
1
解决办法
9106
查看次数

CloudFront 是否支持 KMS 加密对象的 S3 签名版本 4?

我将 Cloudfront 与 S3 源一起使用,该源使用 KMS 加密对象。向 S3 存储桶中的对象发送 GET 请求时出现以下错误。

Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4.

我认为 Cloudfront 足够聪明,可以在请求对象时使用 AWS 签名版本 4,但也许不是?

看起来这是新 S3 区域的问题Amazon 最近增加了对这些新区域的支持,但我认为他们没有解决 KMS 加密对象的问题。

有没有人有这方面的经验,并知道是否有办法让 Cloudfront 的源访问标识使用签名 v4?

encryption amazon-s3 amazon-cloudfront kms amazon-web-services

5
推荐指数
0
解决办法
2027
查看次数

蓝/绿部署 - 以 ELB 作为自定义源的 AWS Cloudfront

我有以下配置:

Cloudfront - ELB - AutoScalingGroup - EC2s

  • Cloudfront 提供file-[hash].js来自自定义源 (ELB) 的文件(名称中包含 chunkhash)。
  • EC2 为 Cloudfront 提供file-[hash].js文件以及index.html指向.jsCloudfront 中适当文件的动态生成的文件。
  • ELB 启用了连接耗尽。

一切正常,直到触发具有更改的资产的 Cloudformation 部署(假设从file-1.jsfile-2.js) - 当新版本打开时,浏览器获取index.html指向 的新文件时有一个很短的时间窗口file-2.js,但当它尝试下载时file-2.js它从 Cloudfront 获取 404,从而向用户显示错误。

我理解这是因为蓝/绿部署的工作原理 - 即有时应用程序的两个版本同时工作,ELB 可以将一个请求重定向到新版本(来自index.html浏览器的请求),将第二个请求重定向到旧版本(从 Cloudfront请求file-2.js)。

Cloudfront 文档说您应该“在所有服务器上托管并提供相同的内容。”,但我如何在部署过程中实现这一点?是否可以强制在任何给定时间通过 ELB 只能访问单一版本的应用程序,以便 Cloudfront 永远不会收到新资产的 404 错误?

如果没有,除了从自定义源切换到 S3 之外,还有其他选项可以解决此问题吗?(由于部署/维护复杂性,希望避免它)

请注意,从更新策略 AutoScalingRollingUpdate 切换到 AutoScalingReplacingUpdate 没有帮助:

助理秘书长:
    类型:AWS::AutoScaling::AutoScalingGroup
    创作政策:
      资源信号:
        数数:
          参考号:2
        超时:PT10M …

amazon-cloudfront amazon-web-services amazon-elb

5
推荐指数
1
解决办法
757
查看次数

配置 AWS Cloudfront 以登录到另一个 AWS 账户中的 S3 存储桶

在此处输入图片说明我有一些分布在不同 AWS 账户中的 AWS Cloudfront 发行版。

我想将来自这些分布的访问日志存储在单个 AWS 账户的单个 S3 存储桶中。

这是可能的,但没有记录(我可以找到)。

目前尚不清楚日志存储桶需要对 ACL 进行哪些更新,或者需要什么(如果有)存储桶策略。

我似乎需要的是更新存储桶上的 ACL,以将 FULL_CONTROL 赋予 Cloudfront 用于写入日志的其他 AWS 帐户中的任何帐户的规范 ID。

如果其他人已经配置了这个并且可以提供帮助,我将非常感激。

cdn amazon-cloudfront amazon-web-services

5
推荐指数
1
解决办法
4924
查看次数

AWS Cloudfront 上的多租户(多域/多证书)

我有 AWS CloudFront 服务内容(来自 EC2/等),效果很好。我拥有的内容是“多租户”的,因为它根据所使用的域调整其品牌/主题。理论上,我只想有一个 CloudFront 发行版为所有不同的域提供服务。

问题是 CloudFront 仅支持每个发行版一个证书。 我需要所有站点都是安全的(因为 HTTP 基本上已被弃用)。此外,我需要轻松支持扩展到数百甚至数千个域!

我可以使用 SAN 证书让每个证书拥有多个域,但是证书颁发机构施加了一些限制(而且通常建议证书不要太大),并且在添加/删除域时会带来维护麻烦。

那么如何使用 CloudFront 管理多个安全域(可能超过 1000 个)? 如果不为每个证书创建一个新的发行版似乎是不可能的:/

我可以尝试创建自己的 CDN,这是一个不平凡的项目,我没有时间。另外,我听说一些 CDN (CloudFlare) 对多证书发行版收取过高的费用 - 但它们似乎太贵了,而且我宁愿坚持使用 AWS,因为我拥有的其他一切都在那里。

amazon-cloudfront

5
推荐指数
0
解决办法
919
查看次数