我在Amazon CloudFront中设置了两个发行版。两个起源都指向同一个桶。如果找不到请求的资源,则存储区会重定向到API网关。 API网关执行生成资源的Lambda函数,此处调整其大小。完成后,它会重定向到可定义的URL(以后称为Lambda重定向URL)。在有问题的情况下,此重定向URL是一个cdn URL,它作为备用域名(CNAME)映射到其中一个发行版。
下图显示了流程:
现在,为简单起见,我通过CloufFront分发URL访问尚未存在的资源来调用此流程。通过两个不同的发行版:我一个分配,其中备用域名(CNAME)设置为cdn.example.de而 II 分配没有。否则分布是相同的,例如与他们的起源有相同的桶。
如果访问方向我,我会在浏览器中获得too many redirects
。如果访问 II ,一切正常,这意味着,我最终得到了调整大小的图像并在地址中有CDN URL。
什么有效:对我的请求也创建资源。因此,成功调用Lambda函数。此外,如果我通过 II 构建的 I 请求资源,一切正常。因此,问题是,CloudFront分发的重定向以某种方式被缓存。但这是我无法得到的部分:只有在资源成功创建并放回S3存储桶后,Lambda函数才会重定向到CDN。因此,重定向不应该是最终的。它应该是CloudFront - > Buckets网站 - > API网关 - > CDN(第一次) - > CloudFront - >铲斗 - >交付!
有趣的是,如果我将Lambda重定向URL设置为存储桶端点,它就像魅力一样。
问题:如果我使用CloudFront分配结合Lambda函数设置CNAME,如何解决too many redirects
问题。这应该是标准的