标签: amazon-cloudfront

使用 S3 的 Amazon Cloudfront。拒绝访问

我们正在尝试通过 Cloudfront 分发 S3 存储桶,但由于某种原因,唯一的响应是一个 AccessDenied XML 文档,如下所示:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>89F25EB47DDA64D5</RequestId>
    <HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

这是我们正在使用的设置:

分发设置 原点设置

这是存储桶的策略

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

permissions amazon-s3 amazon-cloudfront amazon-web-services

126
推荐指数
4
解决办法
11万
查看次数

Chrome S3 Cloudfront:初始 XHR 请求中没有“Access-Control-Allow-Origin”标头

我有一个网页 ( https://smartystreets.com/contact ),它使用 jQuery 通过 CloudFront CDN 从 S3 加载一些 SVG 文件。

在 Chrome 中,我将打开一个隐身窗口以及控制台。然后我将加载页面。当页面加载时,我通常会在控制台中收到 6 到 8 条类似于以下内容的消息:

XMLHttpRequest cannot load 
https://d79i1fxsrar4t.cloudfront.net/assets/img/feature-icons/documentation.08e71af6.svg.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://smartystreets.com' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

如果我对页面进行标准重新加载,甚至多次,我仍然会遇到相同的错误。如果我这样做,Command+Shift+R那么大多数,有时是全部图像将在没有XMLHttpRequest错误。

有时即使在图像加载后,我也会刷新并且一个或多个图像不会加载并XMLHttpRequest再次返回该错误。

我已经检查、更改并重新检查了 S3 和 Cloudfront 上的设置。在 S3 中,我的 CORS 配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedOrigin>http://*</AllowedOrigin>
    <AllowedOrigin>https://*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

(注意:最初只有<AllowedOrigin>*</AllowedOrigin>,同样的问题。)

在 CloudFront 中,分配行为设置为允许 HTTP Methods: GET, …

google-chrome amazon-s3 amazon-cloudfront jquery cors

45
推荐指数
2
解决办法
3万
查看次数

来自具有 S3 源的 AWS CloudFront 的文件没有缓存控制标头

我们刚刚迁移到亚马逊 AWS。我们目前有一个运行良好的 EC2 实例。它在前端运行 Nginx,在后端运行 Apache。这也运行良好。所有站点都已正确启动,并包含从 EC2 提供的文件的 Cache-Control 标头。

问题在于我们放置在Amazon S3中的所有静态文件都是通过CloudFront CDN访问的。我们可以正常访问文件(并且 CORS 没有问题),但显然CloudFront 不提供带有 Cache-Control 标头的文件。我们想利用浏览器缓存。

在我看来,EC2 实例在这里不起作用,因为静态文件由 S3+CloudFront 直接提供,请求不会转到 EC2 中的 Web 服务器。

我完全迷失了。

问题:1)在这种情况下如何设置Cache-Control?2)是否可以设置Cache-Control?从 S3 还是 CloudFront?

注意:我在 Google 中找到了几个页面,您可以在其中为单个对象设置 S3 中的 Header。这真的不是一种特别有效的方法,因为在我的情况下,我们正在谈论几个对象。

谢谢!

cache amazon-s3 cdn amazon-cloudfront amazon-web-services

32
推荐指数
1
解决办法
3万
查看次数

为什么 CloudFront 没有跟随 S3 网站重定向位置?

我有一个托管在 Amazon S3 上的网站。它是托管在 WordPress 上的旧网站的新版本。

我已经设置了一些带有元数据的文件Website Redirect Location来处理旧位置并将它们重定向到新的网站页面。

例如:我http://www.mysite.com/solution想重定向到http://mysite.s3-website-us-east-1.amazonaws.com/product.html所以我solution在我的存储桶中创建了一个带有正确元数据的空文件:

Website Redirect Location= /product.html

S3 重定向元数据相当于一个301 Moved Permanently非常适合 SEO 的元数据。这在直接从 S3 域访问 URL 时非常有效。

我还基于网站存储桶设置了 CloudFront 分配。当我尝试通过我的发行版访问时,重定向不起作用,即:

http://xxxx123.cloudfront.net/solution 不重定向而是下载空文件。

所以我的问题是如何通过 CloudFront 分配保持重定向?或者关于如何在不恶化 SEO 的情况下处理重定向的任何想法?

谢谢

amazon-s3 amazon-cloudfront

23
推荐指数
1
解决办法
3万
查看次数

在 Cloudfront 上设置 Access-Control-Allow-Origin

我在使用 AWS Cloudfront 向 Firefox 提供静态资产时遇到问题。

Chrome 运行良好,但 Firefox 返回 CORS 错误。

如果我执行 curl ,我会得到:

HTTP/1.1 200 OK
Content-Type: application/x-font-opentype
Content-Length: 39420
Connection: keep-alive
Date: Mon, 11 Aug 2014 21:53:50 GMT
Cache-Control: public, max-age=31557600
Expires: Sun, 09 Aug 2015 01:28:02 GMT
Last-Modified: Fri, 08 Aug 2014 19:28:05 GMT
ETag: "9df744bdf9372cf4cff87bb3e2d68fc8"
Accept-Ranges: bytes
Server: AmazonS3
Age: 2743
X-Cache: Hit from cloudfront
Via: 1.1 c445b20dfbf3128d810e975e5d84e2cd.cloudfront.net (CloudFront)
X-Amz-Cf-Id: ...
Run Code Online (Sandbox Code Playgroud)

我认为需要标题:

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

谁能帮我?为什么它是 Firefox 而不是 Chrome 的问题?我该如何解决?

firefox amazon-s3 amazon-cloudfront amazon-web-services cors

22
推荐指数
2
解决办法
5万
查看次数

使用 CloudFront 进行蓝/绿部署

我正在寻找一种使用CloudFront进行蓝/绿部署的方法。

有没有人有一个很好的解决方案来从一个 CloudFront 分布转移到另一个分布,或者每个人真的只是创建他们的分布然后再也不接触它?

我的 CloudFront 分配包含一个用于静态内容(javascript 等)的S3和一个指向 AWS ELB 的自定义源。

CloudFront 没有变化

在正常情况下,我们根本不会对 CloudFront 分配进行任何更改。我们通过更改 S3 中静态内容文件的名称对 S3 源中的静态内容进行版本控制,并在弹性负载均衡器 (ELB) 下滚动部署到 EC2 实例。但是,有时我们需要对 CloudFront 分发本身进行测试和更改,或者对我们的环境进行足够大的更改,以至于我们需要指向新环境中的新 ELB。

两个 CloudFront 分配

我尝试的第一个选项是拥有两个单独的 CloudFront Web Distributions,一个用于我当前的环境或 A 环境,另一个用于我的新环境或 B 环境。我尝试使用 Route53加权路由策略,其中我为 www.domain.com Route53 记录添加了两条记录,一条指向权重为 1 的 CloudFront Distribution A,另一个指向权重为 0 的 CloudFront Distribution B。计划是在我想从分配 A 转移到分配 B 时更改权重。 但是,一次只有一个 CloudFront 分配可以注册www.domain.com备用域名 (CNAME),否则您会收到以下错误:

com.amazonaws.services.cloudfront.model.CNAMEAlreadyExistsException: One or more of the CNAMEs you provided are already …
Run Code Online (Sandbox Code Playgroud)

deployment amazon-cloudfront

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

如何在不支付 600 美元的情况下将 https 与 AWS Cloudfront 一起使用来上传我的证书?

我可以通过 Amazon CloudFront 托管一个动态网站,因为它们具有CNAME Wildcard Support。但是,我网站的某些页面使用 HTTPS。Amazon有一些关于如何将您的 SSL 证书与 CloudFront 分配相关联的文档,但定价显示每月花费600 美元,对我来说太多了。

我的问题是...是否可以配置 CloudFront 以便从 CloudFront 提供 HTTP 请求,但 CloudFront 忽略 HTTPS 请求并直接传递到源(在我的情况下,弹性负载均衡器可以免费解密 SSL) ?

ssl https amazon-cloudfront amazon-elb

15
推荐指数
2
解决办法
5094
查看次数

什么是 Amazon Route53“别名”DNS 记录?

AWS Route53 别名值

考虑在 AWS Route53 上注册的域。对此域的 HTTP 请求应由 AWS CloudFront CDN 分配提供。为了实现这一点,A定义了一个别名记录:

在此处输入图片说明

dig 结果

但是,dig结果显示的是实际 IP 地址。事实上,这些 IP 地址并不是固定不变的,并且会随着时间而变化:

# dig @1.1.1.1 serverlessdaystlv.io

...

;; ANSWER SECTION:
serverlessdaystlv.io.   60      IN      A       13.32.67.21
serverlessdaystlv.io.   60      IN      A       13.32.67.27
serverlessdaystlv.io.   60      IN      A       13.32.67.97
serverlessdaystlv.io.   60      IN      A       13.32.67.122
serverlessdaystlv.io.   60      IN      A       13.32.67.141
serverlessdaystlv.io.   60      IN      A       13.32.67.159
serverlessdaystlv.io.   60      IN      A       13.32.67.201
serverlessdaystlv.io.   60      IN      A       13.32.67.216

# dig @1.1.1.1 serverlessdaystlv.io

...
;; ANSWER SECTION: …
Run Code Online (Sandbox Code Playgroud)

domain-name-system alias amazon-cloudfront amazon-web-services amazon-route53

15
推荐指数
1
解决办法
6000
查看次数

强制 CloudFront 传递来自 S3 的最新 HTML 文件

背景

我在 S3 上托管一个静态站点,顶部是 CloudFront。我的问题是我的 HTML 文件。

根据CloudFront 的常见问题解答

Amazon CloudFront 使用这些缓存控制标头来确定检查源文件更新版本的频率

到目前为止我所做的

考虑到这一点,我已将 S3 Bucket 中的 HTML 文件设置为添加以下标头:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

在我第一次调用 my 时samplefile.htm,我看到以下响应标头(Content-Type为了保持重点,我已经排除了明显的标头(例如):

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront
Run Code Online (Sandbox Code Playgroud)

如您所见,我的Cache-Control标题在那里。问题是,如果我更新此文件并刷新,我将获得缓存内容(而不是最新文件),并且我可以通过查看响应标头看到 CloudFront 正在提供其缓存版本:

X-Cache:Hit from cloudfront

总结/问题

综上所述,在使用 CloudFront 时,如何实现自动检索最新的 HTML? …

amazon-s3 amazon-cloudfront amazon-web-services

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

来自 S3 源的 Amazon CloudFront 上的 HSTS

是否可以在来自 S3 源的 Amazon CloudFront 分配上设置 HSTS 标头?

ssl amazon-cloudfront hsts

13
推荐指数
3
解决办法
1万
查看次数