我已经完成了创建 CloudFront 分配的过程,其中原始域名指向我的主要 Rails 应用程序,其中 Assets (图像、css、js 等)位于 /assets
。
但是,默认情况下,CloudFront 分发镜像整个域(包括动态页面)。
我怎样才能将它限制为仅 /assets
子树?
PS 这是我正在关注的文章:
https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn
谢谢!
最佳答案
由于无法(afaik)删除默认缓存行为,这似乎是一个聪明的“无服务器”解决方案:
在 S3 中创建一个存储桶。名字无关紧要。不要在里面放任何东西。
将第二个源添加到您的 CloudFront 分配,选择新存储桶作为源。
使用指向原始来源的路径模式
/assets/*
创建第二个缓存行为。更改默认缓存行为以使用新的 S3 来源(未使用的空存储桶)。
CloudFront 会将对
/assets/*
的请求转发到您现有的服务器,在那里它们将像现在一样被处理,但所有其他请求将被发送到空桶,该桶没有内容且没有权限,因此响应将是403 Forbidden
。可选地,将适当的“robots.txt”文件添加到那个原本为空的存储桶,并使其公开可读,这样 CloudFront 就会将其提供给访问您的 CloudFront 分配的任何爬虫,禁止它们编制索引,这应该有望提示他们删除任何已经编入索引的结果,而不是尝试通过在“错误”URL 抓取先前公开的内容来尝试对 Assets 或他们可能已经了解的任何其他路径编制索引。
关于ruby-on-rails - 如何限制 AWS CloudFront 使其仅处理来 self 域中单个目录的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151206/