我在使用多个来源的云端工作时遇到了问题。
我有两个来源:
ORIGIN 1
路径: 默认(*)
产地: Custom-example1.com/p
ORIGIN 2
路径: ns /
产地: Custom-example2.com/Produtos
我可以访问原始和默认的原点,但不能访问第二个。
我有一个来自我想要访问的第二个来源的图像:
http://example2.com/Produtos/06/D12-1365-006/D12-1365-006_detalhe1.jpg
如何通过第二个来源访问图像?
我的网站是cdn.mysite.com。
答案 0 :(得分:8)
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个触发点。您可以在每个缓存行为中使用它们的任意组合。
Cache-Control
标题的来源特别有用。此处设置Cache-Control
标头会影响CloudFront和浏览器缓存行为。此触发器不会触发错误,仅触发具有HTTP状态代码的原始响应< 400。对于此处讨论的应用程序,解决方案需要Lambda @ Edge Origin Request 触发器,以在选中缓存后从请求路径中删除已知前缀,但是之前将请求发送到源服务器。