【问题标题】:Cloudfront - multiple origins on same distributionCloudfront - 同一分布上的多个来源
【发布时间】:2015-10-03 13:34:48
【问题描述】:

我无法让 Cloudfront 与多个来源一起工作。

我有两个起源:

原点 1

路径: 默认 (*)

产地: 自定义-example1.com/p

起源 2

路径: ns/

产地: Custom-example2.com/Produtos

我可以访问原始和默认源,但不能访问第二个。

我有例如我想访问的第二个来源的图像:

http://example2.com/Produtos/06/D12-1365-006/D12-1365-006_detalhe1.jpg

如何通过第二源访问图片?

我的网站是 cdn.mysite.com。

【问题讨论】:

  • 根据您对配置的描述,现在唯一可以从源 2 访问的内容是 example2.com/Produtos/ns/*,您可以使用 cdn.example.com/ns/* 访问它......这听起来不像您想要的...... . 是吗?
  • 正确,那是错误的......我想访问像 cdn.mysite.com/ns/Productos/* 这样的 orgin 2 并且应该参考 example2.com/Productos/*

标签: amazon-cloudfront


【解决方案1】:

CloudFront 提供了两种与 url-path 相关的机制。

一个是缓存行为path pattern,它定义了哪些路径被路由到哪些源。

路径模式/foo/*将所有匹配/foo/*的请求发送到指定的源,使用原始请求中的路径,所以传入请求上的GET /foo/bar将按原样发送,GET /foo/bar在向源发出请求

...除非...路径被origin path 修改,它会在每个发往源的请求的开头添加一个前缀。

如果上面的源具有/baz 的源路径,那么到源的传出请求将是GET /baz/foo/bar

因此,没有移除路径组件的机制——仅用于添加它们。

在将请求转发到源之前,没有配置选项可以删除路径的组件。如果GET /foo/bar 应该作为GET /bar 转发到源... CloudFront 当前没有该功能。

CloudFront 本身无法删除或以其他方式重写将发送到源的路径,但 Lambda@Edge 可以。 Lambda@Edge 是一项 CloudFront 功能,允许您配置在请求处理期间在 4 个不同点触发的触发器,并使用用 Node.js 编写的代码修改请求的部分(包括路径和标头)或响应(标头) .

CloudFront 创建一个表示请求属性的数据结构并调用 Lambda 函数,将该结构作为 event 参数传递。 Lambda 函数的响应会相应地修改 CloudFront 行为。

有 4 个触发点。您可以在每个缓存行为上使用它们的任意组合。

  • 查看器请求触发器在缓存行为路径模式匹配的初始匹配完成之后,但在检查缓存之前触发。在这里,您可以检查来自浏览器的传入请求,修改路径和标头,甚至——根据请求的内容——直接从 Lambda 函数生成一个简单的响应,该响应无需进一步处理就返回给浏览器由 CloudFront 提供。在此处修改路径将更改 CloudFront 用于缓存查找的路径,但不会导致 CloudFront 选择不同的缓存行为。检查缓存后,如果缓存命中,可能会向查看器返回响应,或者可能会在 CloudFront 内继续处理。
  • 源请求触发器在 CloudFront 没有对象的缓存副本时触发,然后请求被发送到源。可以在此处修改路径和标头,如果需要,可以直接生成简单的响应,而无需将请求发送到源。即使您重写路径,此触发器也不会导致缓存行为选择发生变化。当需要重写路径时,这通常是最经济有效的触发器,因为它仅在对象不在缓存中时触发。 (相比之下,查看器请求触发器会针对每个请求触发。)
  • 源响应在响应从源返回时触发,在对象被缓存并返回给查看器之前。在这里,您仍然可以检查原始请求,但修改它为时已晚。您可以修改响应标头。这对于没有设置您想要的 Cache-Control 标头的来源特别有用。在此处设置 Cache-Control 标头会影响 CloudFront 和浏览器缓存行为。此触发器不会触发错误,只会触发 HTTP 状态代码
  • 查看器响应在 CloudFront 将对象返回给查看器之前触发触发,无论它是从源中新获取的,还是从缓存中提供的。响应标头可以修改。

对于此处讨论的应用程序,该解决方案需要 Lambda@Edge Origin Request 触发器,以便在检查缓存后从请求路径中删除已知前缀,但是请求被发送到源服务器之前。

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2020-04-24
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多