AWS CloudFront 和服务器端呈现 (Nuxt) 的问题

Problem with AWS CloudFront and Server Side Rendering (Nuxt)

我在使用 AWS CloudFront 和 Nuxt 服务器端渲染时遇到问题

这是我的应用程序的组成部分:

作为应用程序的入口点,我有一个 CloudFront 分配,它将后端请求 (/api/*) 拆分到 EC2 实例,前端请求(默认)拆分到 API 网关端点,因此前端是由 Lambda 呈现的服务器端。

前端代码向后端执行HTTP请求以检索数据,使用public CloudFront URL(因为渲染是混合的,第一次是运行服务器-端,但如果用户导航回到主页,它会呈现在客户端)。

调用流程如下:

Browser => CloudFront (frontend path) => API Gateway => Lambda (render app) => CloudFront (backend path) => EC2

Lambda 函数在调用 CloudFront 时收到 403 错误('x-cache':['Error from cloudfront']),没有其他详细信息。

但如果我直接在 API 网关中浏览前端(绕过 CloudFront),一切正常:

Browser => API Gateway => Lambda (render app) => CloudFront (backend path) => EC2

我不明白为什么通过 CloudFront 调用 Lambda 函数会影响它向 CloudFront 发出 HTTP 请求的能力 URL,或者换句话说,为什么 CloudFront 会拒绝该请求。

AWS 支持人员已澄清问题。

有一个“Via”header,每次涉及CF时都会增加一个额外的值,并且有一个限制,即header不能包含超过2个CF引用。

Serverless生成的APIGateway是Edge-Optimized,所以涉及到最近的CF Edge Location,请求涉及的CF分布数变成3个,这是不允许的.

解决方案是使用区域 API 网关而不是 Edge-Optimized API 网关,将涉及的 CF 分发数量减少 1。