ruby-on-rails - 如何限制 AWS CloudFront 使其仅处理来 self 域中单个目录的请求?

标签 ruby-on-rails amazon-web-services amazon-cloudfront

我已经完成了创建 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 或他们可能已经了解的任何其他路径编制索引。

The red line is origin (Rails) server

关于ruby-on-rails - 如何限制 AWS CloudFront 使其仅处理来 self 域中单个目录的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151206/

相关文章:

amazon-web-services - 有没有一种简单的方法来克隆胶水作业,但更改数据库连接?

amazon-cloudfront - 固定政策和自定义政策有什么区别?

grails - Grails应用程序未从云前端加载js和CSS

amazon-web-services - Amazon SQS消息正文的目的与消息属性的相反

cookies - Cloudfront 签名 cookie 并同时访问 s3 存储桶中的多个路径

ruby-on-rails - bundler /设置(LoadError)

ruby-on-rails - 使用 curl、params 数组测试 rails grape API

ruby-on-rails - 无法从类内部访问私有(private)方法?

ruby-on-rails - id字段的Elasticsearch构面值

reactjs - 如何在浏览器中获取 Cognito ID token ?