如果启用了 AllViewer 源策略,Cloudfront 将请求传递到不正确的源

Cloudfront passes request to incorrect origin if AllViewer origin policy is enabled

我创建了一个包含以下详细信息的云端分发:

通过上述设置,我看到了所需的行为,即对以 /api/ 开头的任何路径的所有请求都被重定向到 Origin2,其余的被重定向到 Origin1。缓存策略也能正常工作。

但现在我希望在不影响缓存模式的情况下将 headers/query 参数转发到源。因此,对于 Origin2 的行为 (/api/*),我添加了 AllViewer Origin 策略(转发所有 headers、查询请求等)。但是现在 /api/* 调用被重定向到 Prod/api/* 并且使用 Origin1 而不是 Origin2。

这对我来说似乎很违反直觉,如果我遗漏了什么,有人可以指教吗?

希望你一切顺利。

关于您的询问,似乎 托管源请求策略 AllViewer 是罪魁祸首。如果您使用 AllViewer 策略,它将 host header 转发到您的来源。请参考以下回复:

假设您的配置如下:

  • DefaultBehavior (*) -> Origin1(S3Bucket)
  • APIBehavior (/api/*) -> Origin2(APIG/w 附加了基 /Prod 的端点)

请求流程为:

  1. 示例。com/api/getdata --(主机:example.com)--> CloudFront

Match the APIBehavior (/api/*) path behavior, CloudFront append the path and forward the request.

  1. CloudFront --(主机:example.com)--> 示例。com/Prod/api/getdata

example.com is a custom domain of your CloudFront distribution; it will go back to you CloudFront distribution again.

  1. 示例。com/Prod/api/getdata --(重定向)--> CloudFront

Match the DefaultBehavior (*), CloudFront use Origin1(S3Bucket)

  1. CloudFront --(转发请求/Prod/api/getdata)--> Origin1(S3Bucket)

要修复它,我建议您应该创建一个新的源请求策略,它只转发必要的 headers 和查询字符串。

注意: 如果你让你的源服务像 S3 或 APIG/w,请不要转发 host header。它会导致一些意想不到的行为。

希望这些信息对您有所帮助 如果您有任何问题,请随时告诉我