如何限制 AWS CloudFront 使其仅处理来自我域中单个目录的请求?

How do I limit AWS CloudFont so that it only serves requests from a single directory on my domain?

我已经完成了创建 CloudFront 分配的过程,其中原始域名指向我的主要 Rails 应用程序,其中资产(图像、css、js 等)位于 /assets.

但是,默认情况下,CloudFront 分发镜像整个域(包括动态页面)。

如何将其限制为仅 /assets 子树?

PS这是我正在关注的文章:

https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn

谢谢!

由于无法(afaik)删除默认缓存行为,这似乎是一个聪明的 "serverless" 解决方案:

  • 在 S3 中创建一个存储桶。名字无关紧要。不要在里面放任何东西。

  • 向您的 CloudFront 分配添加第二个源,选择新存储桶作为源。

  • 创建第二个缓存行为,路径模式 /assets/* 指向您的原始来源。

  • 更改默认缓存行为以使用新的 S3 来源(未使用的空存储桶)。

  • CloudFront 会将 /assets/* 的请求转发到您现有的服务器,它们将在此处像现在一样处理,但所有其他请求将发送到没有内容的空存储桶,并且没有权限,所以响应将是 403 Forbidden.

  • 可选地,将适当的 "robots.txt" 文件添加到那个原本为空的存储桶,并使其公开可读,这样 CloudFront 会将其提供给访问您的 CloudFront 分配的任何爬虫,不允许他们从索引中移除,这应该有希望提示他们删除任何已经索引的结果,而不是尝试索引资产或他们可能已经通过在 "wrong" [=47= 处抓取先前暴露的内容而学习的任何其他路径].