我正在 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 它工作正常。
有任何想法吗?
我的设置如下:
所有这一切都是我想要的,但是......
原因是因为 EC2 看到来自负载均衡器的请求,因此它假定基本 url 是 elb.example.com 并相应地生成所有链接。
如何让 EC2 将基本 url 视为 example.com ?
domain-name-system load-balancing cdn amazon-cloudfront amazon-elb
我正在尝试通过 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存在文件(在根目录和子目录中)。
该错误消息是否来自 …
如果我理解得很好,为了创建自定义源分发,我需要在我的自定义源服务器上公开这些文件。
就我而言,这会将这些文件放入 apache 服务器的公共目录中。我的问题是,是否可以将对该 apache 服务器的访问限制为仅限于 cloudfront?
我知道如何做到只允许一个 ip,但是,如何使用 cf 做到这一点?
提前致谢!
我在 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 配置中链接此文件,但出现以下错误:

如果我尝试使用值 /my-app-bucket/errorpage.html,Cloudfront 会将请求重定向到我的 ELB 源,然后我得到 …
所以我有 2 个 Wordpress 网站是这样托管的
http://siteA.mydomain.com http://siteB.mydomain.com我创建了一个发行版,该发行版以上述 2 个域为原点。
siteA.mydomain.comsiteB.mydomain.com我不确定如何配置路由,使其
http://siteA.mydomain.com/wp-content/*进入站点 A 的域,并http://siteB.mydomain.com/wp-content/*进入站点B,因为路径模式相同。
还是我应该为 siteB 创建另一个发行版?
我将 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
我有以下配置:
Cloudfront - ELB - AutoScalingGroup - EC2s
file-[hash].js来自自定义源 (ELB) 的文件(名称中包含 chunkhash)。file-[hash].js文件以及index.html指向.jsCloudfront 中适当文件的动态生成的文件。一切正常,直到触发具有更改的资产的 Cloudformation 部署(假设从file-1.js到file-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 … 我有 AWS CloudFront 服务内容(来自 EC2/等),效果很好。我拥有的内容是“多租户”的,因为它根据所使用的域调整其品牌/主题。理论上,我只想有一个 CloudFront 发行版为所有不同的域提供服务。
问题是 CloudFront 仅支持每个发行版一个证书。 我需要所有站点都是安全的(因为 HTTP 基本上已被弃用)。此外,我需要轻松支持扩展到数百甚至数千个域!
我可以使用 SAN 证书让每个证书拥有多个域,但是证书颁发机构施加了一些限制(而且通常建议证书不要太大),并且在添加/删除域时会带来维护麻烦。
那么如何使用 CloudFront 管理多个安全域(可能超过 1000 个)? 如果不为每个证书创建一个新的发行版似乎是不可能的:/
我可以尝试创建自己的 CDN,这是一个不平凡的项目,我没有时间。另外,我听说一些 CDN (CloudFlare) 对多证书发行版收取过高的费用 - 但它们似乎太贵了,而且我宁愿坚持使用 AWS,因为我拥有的其他一切都在那里。