我一直在寻找让我的网站加载更快的方法,我想探索的一种方法是更多地使用Cloudfront.
因为Cloudfront最初并非设计为自定义源CDN,并且因为它不支持gzipping,所以到目前为止我一直使用它来托管我的所有图像,这些图像在我们的站点代码中由他们的Cloudfront cname引用,并且远远优化了-futures标题.
另一方面,CSS和javascript文件托管在我自己的服务器上,因为直到现在我的印象是他们无法从Cloudfront gzip服务,并且gzipping(大约75%)的收益超过了使用CDN(约50%):Amazon S3(以及Cloudfront)不支持使用浏览器发送的HTTP Accept-Encoding标头以标准方式提供gzip压缩内容,以表明它们支持gzip压缩,以及所以他们无法动态地使用Gzip和服务组件.
因此,直到现在,我仍然不得不在两种选择之间做出选择:
将所有资产移至Amazon CloudFront并忘记GZipping;
保持组件自托管并配置我们的服务器以检测传入请求并在适当时执行动态GZipping,这是我到目前为止所做的.
还有人变通办法来解决这个问题,但本质上这些没有工作.[ 链接 ].
现在,似乎Amazon Cloudfront支持自定义源,并且如果您使用自定义源 [ 链接 ],现在可以使用标准HTTP Accept-Encoding方法来提供gzip压缩内容.
到目前为止,我还没有能够在我的服务器上实现新功能.我上面链接的博客文章,这是我发现的唯一一个详细说明变更的博客文章,似乎暗示你只能启用gzipping(条形图解决方法,我不想使用),如果你选择自定义来源,我宁愿不这样做:我发现在我的Cloudfront服务器上托管相应的文件更简单,并从那里链接到它们.尽管仔细阅读文档,但我不知道:
新功能是否意味着文件应该通过自定义源托管在我自己的域服务器上,如果是,那么代码设置将实现此目的;
如何配置css和javascript标头以确保它们是从Cloudfront gzip中提供的.
我在几个Chrome浏览器上收到以下错误,但不是全部.目前还不确定问题是什么.
来自" https://ABCDEFG.cloudfront.net "的字体已被跨源资源共享策略阻止加载:请求的资源上没有"Access-Control-Allow-Origin"标头.因此,不允许来源" https://sub.domain.com "访问.
我在S3上有以下CORS配置
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
请求
Remote Address:1.2.3.4:443
Request URL:https://abcdefg.cloudfront.net/folder/path/icons-f10eba064933db447695cf85b06f7df3.woff
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:abcdefg.cloudfront.net
Origin:https://sub.domain.com
Pragma:no-cache
Referer:https://abcdefg.cloudfront.net/folder/path/icons-e283e9c896b17f5fb5717f7c9f6b05eb.css
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
来自Cloudfront/S3的所有其他请求都能正常工作,包括JS文件.
我正在使用亚马逊的CloudFront来提供我的网络应用程序的静态文件.
有没有办法告诉云端分发它需要刷新它的文件还是指出应该刷新的单个文件?
亚马逊建议您将文件版本如logo_1.gif,logo_2.gif等作为此问题的解决方法,但这似乎是一个非常愚蠢的解决方案.绝对没有别的办法吗?
我想使用Amazon S3和CloudFront托管仅限HTTPS的静态网站.这是我到目前为止所做的:
www
指向CloudFront存储桶的子域添加了CNAME记录.到目前为止,非常好 - 我可以使用该www.example.com
地址访问我的网站.但是,我希望该网站仅通过HTTPS提供,我从GoDaddy购买了SSL证书.
现在,问题是:
我将在CloudFront上创建一个新的发行版.我已经使用AWS CLI在AWS IAM上传了我的SSL证书.该证书显示在新分发页面上的"自定义SSL证书"下拉列表中,但它已禁用.
有人能告诉我为什么会这样吗?如何为此发行版选择我的自定义SSL证书?
ssl amazon-web-services amazon-cloudfront amazon-iam aws-cli
如何在Cloudfront上的静态托管网站上为子目录设置默认根对象?具体来说,我想www.example.com/subdir/index.html
在用户要求时提供服务www.example.com/subdir
.注意,这是用于提供在S3存储桶中保存的静态网站.此外,我想使用原始访问标识将对S3存储桶的访问限制为仅限Cloudfront.
现在,我知道的Cloudfront作品不同于S3和Amazon规定明确:
CloudFront默认根对象的行为与Amazon S3索引文档的行为不同.将Amazon S3存储桶配置为网站并指定索引文档时,即使用户请求存储桶中的子目录,Amazon S3也会返回索引文档.(索引文档的副本必须出现在每个子目录中.)有关将Amazon S3存储桶配置为网站和索引文档的更多信息,请参阅Amazon Simple Storage Service开发人员指南中的Amazon S3上的主机网站章节.
因此,即使Cloudfront允许我们指定默认的根对象,这只适用于www.example.com
而不适用于www.example.com/subdir
.为了解决这个难题,我们可以将原始域名更改为指向S3给出的网站端点.这很好用,可以统一指定根对象.不幸的是,这似乎与原始访问标识不相容.具体来说,以上链接指出:
切换到编辑模式:
Web分布 - 单击"起源"选项卡,单击要编辑的原点,然后单击"编辑".您只能为Origin Type为S3 Origin的原点创建原始访问标识.
基本上,为了设置正确的默认根对象,我们使用S3网站端点而不是网站存储桶本身.这与使用原始访问标识不兼容.因此,我的问题归结为两者
是否可以为Cloudfront上的静态托管网站的所有子目录指定默认根对象?
是否可以为从Cloudfront提供的内容设置原始访问标识,其中源是S3网站端点而不是S3存储桶?
几周前,亚马逊宣布他们已经降低了内容的有效期:
实际上,您可以将CloudFront中的TTL设置为0.所以我的问题是,为什么将TTL设置为0的CloudFront分配有用.对我而言,这意味着根本没有缓存,因此每个到达CloudFront的请求都是如此.最终会击中原点.
我错过了什么?
请原谅我,如果之前有人询问过,有很多资源可以触及,但似乎没有什么适合我的特定(https)用例.
我正在尝试将https://www.example.com重定向到https://example.com.同样,这应该适用于http://www.example.com到https://example.com.
我已经设置了一个带有s3存储桶源的云端分发,将http重定向到https,添加了cname example.com并添加了我的域证书(适用于www子域以及裸域).
我还设置了一个单独的发行版,其中包含www.example.com的cname,添加了证书并将原点设置为一个单独的s3存储桶,在(静态网站托管)中将所有请求重定向到https://example.com.
重定向按预期方式运行http://example.com到https://example.com,但http:s://www.example.com到https://example.com则没有.
在路由53中,我将根域别名为第一个云端分布,而www别名为第二个.
我使用静态网站托管选项在Amazon S3上托管一个静态网站,这样S3将呈现一个文件夹,而不会让我明确指向我的index.html文件.
例如,这里是我的S3桶中页面的直接链接:http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/正如您所看到的,当当您访问该URL时,Amazon S3会自动在该目录中呈现index.html文件,从而允许我拥有干净的URL.
这一切都适用于S3.我遇到的问题是让Amazon Cloudfront正确处理这种行为.当我创建一个将我的S3存储桶指定为源的Cloudfront Distribution,并告诉它使用'index.html'作为根时,S3刚刚停止工作的index.html行为.
例如,这里是我在Cloudfront上的相同URL:http://d1mj00c6pby3gc.cloudfront.net/category/2009/
不幸的是,上面的URL不起作用,但如果我手动指定索引文件,它会,例如:http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html
我的问题是:我如何配置Cloudfront以使其尊重我网站的S3存储桶设置?
我们有一个Cloudfront发行版,其定制来源已经运行了很长时间,为我们的一个站点提供静态资产.就在今天早上,我们注意到我们的徽标显示为断开链接.
经过进一步调查,Cloudfront将返回一条我之前从未见过的有关URL的奇怪错误消息:
错误
请求无法满足.
由cloudfront生成(CloudFront)
此分发中的其他几个Cloudfront URL返回相同的错误,但其他(同样,来自同一分发)的工作正常.我没有看到什么有效,哪些无效的模式.
其他一些数据点:
知道这里发生了什么吗?我以前从未见过Cloudfront这样做过.
更新:
以下是Cloudfront的逐字HTTP响应:
$ http GET https://d2yu7foswg1yra.cloudfront.net/static/img/crossway_logo.png
HTTP/1.1 502 Bad Gateway
Age: 213
Connection: keep-alive
Content-Length: 472
Content-Type: text/html
Date: Wed, 18 Dec 2013 17:57:46 GMT
Server: CloudFront
Via: 1.1 f319e8962c0268d31d3828d4b9d41f98.cloudfront.net (CloudFront)
X-Amz-Cf-Id: H_HGBG3sTOqEomHzHubi8ruLbGXe2MRyVhGBn4apM0y_LjQa_9W2Jg==
X-Cache: Error from cloudfront
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2> …
Run Code Online (Sandbox Code Playgroud)