我正在尝试做一些相对简单的事情 - 我想设置一些域和子域以重定向到我们网站的核心域,但我想将重定向放在 Cloudfront 上。除了重定向根路径之外,一切正常——这让我得到了一个 XML 文件,部分描述了 S3 存储桶。
S3 允许您设置全重定向存储桶,例如:

对此进行测试,Web 端点 (brass9-com.s3-website-us-west-1.amazonaws.com) 会执行它应该执行的操作 - 它重定向到 bras9.com。好的。
Cloudfront 允许您指向一个 S3 存储桶,但它建议您这样做的方式是错误的 - 而不是按名称指向存储桶,例如 bras9-com.s3.amazonaws.com,您需要使用上面的 Web 端点。除此之外,您可以将所有内容保留为默认值并获得良好的重定向行为。因此,像www.brass9.com/portfolio这样的路径会正确地重定向到它应该指向的位置。也很好。
然后失败的一件事是从普通的www.brass9.com重定向。它不是让你重定向,而是让你得到这个奇怪的结果:
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>
Run Code Online (Sandbox Code Playgroud)
好的... 。所以这并不完全出乎意料- 因为没有默认根对象。但是我可能会指定什么默认根对象来防止这种行为?我需要指向的 S3 重定向对象的名称是什么(如果有)?或者是否有其他一些适当的配置,或者这只是 Amazon 需要修复的 Cloudfront 和 S3 交互方式中的一个错误?
可以指定 index.html 的默认根对象,但这没有任何帮助 - 它只是改变了问题。Cloudfront url 而是重定向到主站点上的 /index.html,这是一个 404(我们不使用 index.html 文件,它是一个服务器端框架驱动的站点)。我可以在服务器上放置一个 index.html,但这首先会破坏使用 Cloudfront 的小速度增益。 …
我是 CDN 的新手,正在尝试 CloudFront。我已经设置了一切,一切似乎都运行良好。我可以在页面上创建静态图像并通过我的 CloudFront 分配访问它。我使用的是自定义来源(即不是 s3 存储桶)。
不过,我担心从性能的角度来看,我的情况可能会更糟。我有一个测试页面,它在使用和不使用 CDN 的情况下加载相同的 20 个左右的图像。查看 Firebug 中的网络面板,我第一次加载此页面时,直接从源服务器加载的图像的速度要快得多。在后续页面加载时,CDN 的好处变得显而易见——在 3-5 次刷新后,CDN 的表现比原始服务器好。
所以我可以看到,在我们网站上一个一直被点击的热门页面上,这将是一个好处。我应该期待一个好处,因为我在西雅图(在亚马逊附近)并且我的服务器在加州。
问题是,如果我离开页面几分钟然后重新加载,事情又会回到原点,CloudFront 比原始服务器更糟糕。这是预期的吗?东西会这么快地从 CDN“缓存”中掉出来吗?
我的设置中是否有可能影响性能?或者 CDN 只会对当前平均每隔几秒访问一次的内容产生净正面影响?
(从 AWS 论坛交叉发布,因为我一直被 SO 的周转时间宠坏了)
更新:
如果您对 CloudFront 性能有疑问,下面有两个很好的答案值得一看。我最近发现没有提到我的具体问题的一种解释。作为疏忽,我在 5 分钟时离开了 TTL。由于我也在使用自定义源,因此需要额外往返权威名称服务器以将其解析为实际的 Amazon CloudFront 域。现在 TTL 设置又回到了 12 小时,长负载似乎很少发生。
我将我网站的静态资产放在 S3 上,并设置 CloudFront 来分发它们。这些本质上包含用户在我的站点上的任何 GET 请求所需的内容,即现有路径,即包含错误的包罗万象。
我还有一些 POST 请求需要处理。表单提交、发送电子邮件、通知、与数据库交互。
我如何为同一域与 CloudFront 并排设置 Lambda(或 API 网关),以便 CloudFront 处理 GET 请求,而 API Gateway 处理带有正文或 POST 请求的请求。或者我可以以某种方式通过单个 URL 来完成吗?
互联网上有很多教程,通过 AWS S3 + AWS Cloudfront (+ Cloudflare) 促进静态网站的廉价托管。
例如:
我查看了 AWS 服务的定价结构,在 S3 或 Cloudfront 的情况下,我认为不可能限制与无效请求相关的成本,因为亚马逊也在对无效或被阻止请求产生的流量和请求进行计费。
即使使用可以阻止特定 IP 地址范围的 Amazon WAF 也不会对您有帮助,因为请求者仍应收到“拒绝访问”消息或类似消息。
无效请求将导致:
定价(北弗吉尼亚州的 S3 / Cloudfront USA;2018-03-25)
---------------------------------------------------------------------------------------
- service - # requests type - pricing -
---------------------------------------------------------------------------------------
- S3 - 1000 PUT/COPY/POST requests - 0.0050 USD -
---------------------------------------------------------------------------------------
- S3 - 1000 GET and other requests - 0.0004 USD - …Run Code Online (Sandbox Code Playgroud) 假设我正在使用 AWS Certificate Manager 获取example.com用于 AWS CloudFront的证书。我可以指定一个替代域www.example.com并将其指向我的 DNS 中的另一个 CloudFront 分配。
但是 AWS Certificate Manager 还允许我指定一个通配符*.example.com作为备用域,这将允许我将来设置我的 DNS 以路由blog.example.com到另一个 CloudFront 分配,如果我决定需要的话。
添加通配符域(例如*.example.comAWS Certificate Manager)是否有任何不利之处?是不是更贵了?它是否以某种方式使我的配置不灵活?为什么我不想总是将通配符指定*.example.com为备用域,因为这使我可以灵活地在将来随时添加子域?
amazon-cloudfront ssl-certificate amazon-web-services wildcard-subdomain amazon-acm
我有一个 CloudFront 发行版,其默认行为配置为允许任何 CORS 请求,包括预检请求。但是,OPTIONS 请求将失败并出现 HTTP 403 错误(详细信息如下),这不是我所期望的。
\n我正在使用 AWS 管理的CORS-With-Preflight策略,该策略应允许所有 CORS 请求,包括预检 (OPTIONS) 请求:
\n
\n(我不确定为什么 \xe2\x80\x9cOrigin 请求策略\xe2\x80\x9d 区域以黄色突出显示。)
\n政策详情:
\n
\n我已在行为中允许 OPTIONS 请求:
\n
\n但是,当我发送选项请求时,CloudFront 将返回此错误:
\n$ curl --request OPTIONS --url https://d3qj3h7hjzomrd.cloudfront.net/ --header \'Origin: https://www.example.com\'\n\n<?xml version="1.0" encoding="UTF-8"?>\n<Error>\n <Code>AccessForbidden</Code>\n <Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource\'s CORS spec.</Message>\n <Method>OPTIONS</Method>\n <ResourceType>OBJECT</ResourceType>\n …Run Code Online (Sandbox Code Playgroud) 亚马逊最近添加了使用任何服务器作为 Cloudfront 源服务器的功能,消除了最初的仅限 S3 的限制。
我的问题是 - 我该如何设置?AWS web-gui 似乎只支持 S3 存储桶(仍然),并且 ec2 命令行工具似乎没有任何用于注册 Cloudfront 发行版的东西。
任何想法非常感谢!
谢谢,克里斯。
我们的 iOS 应用程序存在问题,该应用程序使用应用程序内购买来解锁可下载的内容 - 但似乎仅来自中国。出于这个原因,我们看到来自中国的许多负面评论。
我们的应用内购买过程涉及访问托管在 DigitalOcean 上的 https 服务器,该服务器验证收据并发回 Amazon CloudFront URL 以供下载。
我已经通过 greatfire.org 检查了我们的服务器,它恢复为绿色。CloudFront 或直接 S3 链接似乎也没有被阻止。
我已经在 PureVPN 上设置了一个帐户并使用了他们的一台中国服务器(通过它们发送所有流量),但是我不确定这些服务器是否真的在中国,因为下载过程有效,我可以访问 Gmail/Facebook/NYTimes .
我可以模拟在中国防火墙后面的最佳方式是什么?
背景:
我有一个 S3 存储桶(Origin 1),它使用 Cloudfront 在域下提供静态网站example.com。
目标:
另外我想example.com/subfolder提供来自second.com(Origin 2)的内容。为使以下内容为真example.com/subfolder = second.com
现在:
在Cloudfront发行版下,我设置了具有行为的Origin 1Default (*)
和具有行为的Origin 2/subfolder*
问题:
去的时候example.com/subfolder我正在接受服务second.com/subfolder
问: 如何以及在哪里调整 Cloudfronts 行为以不转发 URL 的第一部分。
如果我有一个运行 Web 应用程序 (HTTP) 的 EC2 实例,并且有 Amazon 提供的 SSL 证书,我可以使用 CloudFront 使 EC2 实例可通过 HTTPS 访问,自动处理证书。这是 CloudFront 的合法使用,还是应该以不同的方式进行?
amazon-s3 ×2
cdn ×2
https ×2
amazon-acm ×1
amazon-ec2 ×1
china ×1
cloudflare ×1
cors ×1
firewall ×1
redirect ×1
ssl ×1