如果启用了 AllViewer 源策略,Cloudfront 将请求传递到不正确的源
Cloudfront passes request to incorrect origin if AllViewer origin policy is enabled
我创建了一个包含以下详细信息的云端分发:
- 来源 1 -> S3Bucket
- Origin2 -> APIGateway endpoint with base /Prod appended
- DefaultBehavior ->
*
、Origin1、CachingEnabled、无源策略 - APIBehavior ->
/api/*
、Origin2、CachingDisabled
通过上述设置,我看到了所需的行为,即对以 /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
的端点)
请求流程为:
- 示例。com/api/getdata --(主机:example.com)--> CloudFront
Match the
APIBehavior (/api/*)
path behavior, CloudFront append the path and forward the request.
- 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.
- 示例。com/Prod/api/getdata --(重定向)--> CloudFront
Match the
DefaultBehavior (*)
, CloudFront useOrigin1(S3Bucket)
- CloudFront --(转发请求
/Prod/api/getdata
)-->Origin1(S3Bucket)
要修复它,我建议您应该创建一个新的源请求策略,它只转发必要的 headers 和查询字符串。
注意:
如果你让你的源服务像 S3 或 APIG/w,请不要转发 host
header。它会导致一些意想不到的行为。
希望这些信息对您有所帮助 如果您有任何问题,请随时告诉我