我创建了一个包含以下详细信息的云端发行版:
- 来源 1 -> S3 存储桶
- Origin2 -> APIGateway 端点,附加了基本 /Prod
- DefaultBehavior ->
*
,Origin1,CachingEnabled,无源策略 - APIBehavior ->
/api/*
, Origin2, CachingDisabled
通过上述设置,我看到了所需的行为,即对以 /api/
开头的任何路径的所有请求都被重定向到 Origin2,其余的到 Origin1。缓存策略也可以正常工作。
但现在我希望将标头/查询参数转发到源而不影响缓存模式。因此对于 Origin2 的行为 (/api/*
),我添加了 AllViewer Origin 策略(转发所有标头、查询请求等)。但是现在 /api/*
调用被重定向到 Prod/api/*
并且使用 Origin1 而不是 Origin2。
这对我来说似乎很违反直觉,如果我遗漏了什么,有人可以请教吗?
回答1
希望你做得很好。
关于您的询问,似乎托管源请求策略 AllViewer
是罪魁祸首。如果您使用 AllViewer
策略,它会将 host
标头转发到您的来源。请参考以下回复:
假设您的配置如下:
DefaultBehavior (*)
-> 来源 1(S3 存储桶)APIBehavior (/api/*)
-> Origin2(APIG/w 端点与基础/Prod
附加)
请求流程为:
- example.com/api/getdata --(主机:example.com)--> CloudFront
匹配
APIBehavior (/api/*)
路径行为,CloudFront 附加路径并转发请求。
- CloudFront --(主机:example.com)--> example.com/Prod/api/getdata
example.com 是您的 CloudFront 分配的自定义域;它将再次返回给您的 CloudFront 分配。
- example.com/Prod/api/getdata --(重定向)--> CloudFront
匹配
DefaultBehavior (*)
,CloudFront使用Origin1(S3Bucket)
- CloudFront --(转发请求
/Prod/api/getdata
)-->Origin1(S3Bucket)
要修复它,我建议您应该创建一个新的源请求策略,它只转发必要的标头和查询字符串。
注意:如果您让您使用 S3 或 APIGw 等服务,请不要转发 host
标头。它会导致一些意想不到的行为。
我希望这些信息对您有所帮助如果您有任何问题,请随时告诉我