- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先让我快速介绍一下我正在考虑迁移到 S3+Cloudfront 的系统的架构。
我们在树中排列了许多实体。树的叶子拥有一定数量的资源(具体为jpg图片),通常在20-5000个左右,平均~200个。每个资源都有一个唯一的 URL,该 URL 通过我们今天的托管设置提供服务。
我可以将所有这些资源转移到 S3,在其上设置 Cloudfront 并完成。要是我不用保护资源就好了。
大多数实体都是公开的(即~99%),其余实体通过多种方式之一(登录、IP、时间等)受到保护。一旦实体受到保护,所有资源也必须受到保护,并且只有在执行有效授权后才能访问。
我可以通过创建两个 S3 存储桶来解决这个问题 - 一个是私有(private)的,一个是公共(public)的。对于私有(private)内容,我会在用户获得授权后生成签名的 Cloudfront URL。然而,一个实体的状态可能会任意地从公共(public)状态变为私有(private)状态,反之亦然。系统管理员可能会更改实体树任何级别的实体,从而导致整个树发生级联更改。一项更改可能会导致约 2 万个实体发生更改,乘以 200 个资源,这将影响 400 万个资源。
我可以在后台运行一项服务来监视状态更改,但这会很麻烦,并且更改 400 万个 S3 项目的 ACL 将需要相当长的时间,而在这种情况发生时,我们要么拥有不 protected 私有(private)内容,要么我们必须为其生成签名 URL 的公共(public)内容。
另一种可能性是默认将所有资源设为私有(private)。对于向实体发出的每个请求,我们将生成一个自定义策略,为该特定用户授予对该实体中包含的所有资源的访问权限(通过在自定义策略中使用通配符 url)。这需要为每个访问者、每个实体创建一个策略——但这不是问题。但是,这意味着我们的用户无法再缓存任何内容,因为每个新 session 的 URL 都会发生变化。虽然对于私有(private)内容来说这不是问题,但如果我们放弃对 99% 的公共(public)实体的所有缓存,那就太糟糕了。
另一种选择是将所有内容保密并对私有(private)实体使用上述方法。对于公共(public)实体,我们可以为每个公共(public)实体生成一个所有用户都可以共享的自定义策略。如果我们将生命周期设置为 6 小时并确保在 5 小时后生成新策略,则将确保用户的策略生命周期至少为一小时。这样做的优点是可以缓存长达 6 小时,同时允许私有(private)内容在状态更改后可能公开长达 6 小时。这是可以接受的,但我不确定它是否值得(尝试计算当前请求的缓存/命中率)。显然,我们可以调整 5/6 小时边界以启用更长/更短的缓存,但代价是更长/更短地暴露于私有(private)实体。
有人部署过类似的解决方案吗?我忽略了哪些可能有用的 AWS 功能?有什么总体意见吗?
最佳答案
根据大众的要求,我自己回答这个问题。
收集相关指标并进行一些计算后,我们最终得出结论,我们可以减少缓存,但 CloudFront 更快的对象服务速度可以抵消这一影响。实际实现详见我的博客:How to Set Up and Serve Private Content Using S3 and Amazon CloudFront
关于caching - Cloudfront私有(private)内容+签名url架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342315/
我已经为我们的 Cloudfront 分配设置了一个备用域名,这样我们就可以从 oursite.com 提供服务。我们想禁用 ourdistid.cloudfront.net,这样我们的站点只能从一个
假设一个域名为 www.example.com 的网站托管在网站托管商(而非亚马逊)的 LAMP 服务器上。该域由 Route53 管理。 是否有可能以某种方式保留 LAMP 网络服务器上的所有设置并
我在使Cloudfront具有多个来源的工作时遇到麻烦。 我有两个起源: 起源1 小路: 默认 (*) 起源: Custom-example1.com/p 起源2 小路: ns/ 起源: Custom
TLDR:我们必须通过为来自 Lambda 函数的响应创建新的缓存行为来欺骗 CloudFront 307 重定向缓存。 你不会相信我们离实现这一目标有多近。我们在最后一步卡得太厉害了。 商业案例:
How do you set a default root object for subdirectories for a statically hosted website on Cloudfron
有人知道如何使使用友好 url 的自定义来源的根文档无效吗? 例如:example.com ? 通过 AWS Create Invalidation 对话框请求的正确对象路径是什么? 文档仅引用实际文
我正在使用带有自定义源的 CloudFront,并希望将来自 Web 应用程序的某些请求重定向到 CloudFront(客户端使用直接 URL,不能更改为基于 CloudFront 的 URL)。为了
我正在尝试在 AWS CloudFront 上上传公钥。我按如下方式生成 key ssh-keygen -t ecdsa -b 521 我也试过 ssh-keygen -b 4096 当我通过控制台上
我在 wordpress 重定向中的重定向导致域更改时遇到了一些问题。 例子:网站 - noncdn.somedomain.comCDN 网址 - www.domain.com 当我打开没有尾部斜杠的
在 CloudFront 行为设置中,“全部”是将所有请求 header 转发到源吗? Values That You Specify When You Create or Update a Dist
我们的应用程序中使用的图像是从 Amazon CloudFront 呈现的。 修改现有图像时,它不会立即反射(reflect)图像更改,因为 CloudFront 需要大约 24 小时才能更新。 作为
我想设置亚马逊云端,但是 Assets 需要在 http 和 https 上都可用。 我也想使用多个 cname。例如xyz0.cloudfront.netxyz1.cloudfront.netxyz
路径模式属性的文档并不完全详尽。 The pattern to which this cache behavior applies. For example, you can specify imag
我浏览了文档并进行了大量搜索。这些是我知道我可以使用 CloudFront 创建的签名 url 做的事情: 使用固定策略设置时间限制 监控该项目被查看的次数 我还可以为我的签名 URL 设置命中限制吗
cloudfront 是否支持 TLSv1.3 我没有看到任何文档说它在 cloudfront 和自定义来源之间支持?我强烈要求使用 TLSv1.3 最佳答案 CloudFront 现在支持 TLS
我最近才在阅读 Varnish Cache 的功能,以帮助优化我的 PHP 网站的性能。我读到了一个名为 Edge Side Includes 的功能,它似乎让我可以选择构建可以缓存在组件级别的 ht
我是部署静态站点的新手。搜索了大约一段时间的解决方案,根据我遇到的问题,我没有找到任何有用的信息。 宗旨 :我想在 CloudFront 上运行我生成的 Nuxt.js 静态站点。 问题 : 跑命令n
我正在使用 Amazon CloudFront 传送一些 HDS 文件。我有一个原始服务器,它检查 HTTP HEADER REFERER,如果不允许,它会阻止它。 问题是云前端正在删除引用 head
我正在使用 lambda@edge 通过 cloudfront 重定向我的网站。 我已将版本化 lambda arn 附加到我的云前端缓存行为及其所有 4 个事件。 当我访问我的云端端点时,它会显示
有没有办法让 Amazon CloudFront 失效(通过管理控制台),使所有匹配模式的文件失效?例如图像/*.png 语境 - 我在我的网站上为图像设置了缓存控制,但错误地在 Apache 的缓存
我是一名优秀的程序员,十分优秀!