Aws lambda AWS CloudFront和服务器端渲染(Nuxt)存在问题

Aws lambda AWS CloudFront和服务器端渲染(Nuxt)存在问题,aws-lambda,nuxt.js,amazon-cloudfront,serverless-framework,Aws Lambda,Nuxt.js,Amazon Cloudfront,Serverless Framework,我对AWS CloudFront和Nuxt服务器端渲染有问题 以下是我的应用程序的组件: Java后端,运行在EC2上 Nuxt前端(Vue),在API网关+Lambda+S3(使用无服务器框架)上运行服务器端渲染 作为应用程序的入口点,我有一个CloudFront发行版,它将后端请求(/api/*)拆分为EC2实例,将前端请求(默认)拆分为api网关端点,因此前端由Lambda在服务器端呈现 前端代码使用公共CloudFront URL向后端执行HTTP请求以检索数据(因为呈现是混合的,第

我对AWS CloudFront和Nuxt服务器端渲染有问题

以下是我的应用程序的组件:

  • Java后端,运行在EC2上
  • Nuxt前端(Vue),在API网关+Lambda+S3(使用无服务器框架)上运行服务器端渲染
作为应用程序的入口点,我有一个CloudFront发行版,它将后端请求(/api/*)拆分为EC2实例,将前端请求(默认)拆分为api网关端点,因此前端由Lambda在服务器端呈现

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

这就是调用流程:

浏览器=>CloudFront(前端路径)=>API网关=>Lambda(渲染应用程序)=>CloudFront(后端路径)=>EC2

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

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

浏览器=>API网关=>Lambda(渲染应用)=>CloudFront(后端路径)=>EC2


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

AWS支持澄清了这个问题

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

Serverless生成的API网关经过边缘优化,因此它需要经过最近的CF边缘位置,请求中涉及的CF分发数量变为3,这是不允许的


解决方案是使用区域API网关而不是边缘优化的API网关,从而将涉及的CF发行版数量减少了1。

您可以共享整个CloudFront和API网关配置吗?我有一个想法,但我想在提出解决方案之前先看看。嗨,谢谢你的评论。最后,AWS支持澄清了问题。有一个“Via”标题,其中每次涉及CF时都会添加一个额外的值,并且有一个限制,即标题不能包含超过2个CF引用。Serverless生成的API网关经过边缘优化,因此它需要经过最近的CF边缘位置,请求中涉及的CF分发数量变为3,这是不允许的。解决方案是使用区域API网关,而不是边缘优化的API网关,从而将涉及的CF发行版数量减少了1。@SantiagoMedina您的评论刚刚让我从一场为期两天的斗争中解脱出来,这场斗争试图弄清楚为什么CloudFront一直使用403进行响应,而甚至没有将这些响应附加到访问日志中。你能提供这个评论作为答案,并标记为正确,这样其他灵魂也可以被拯救!很高兴它帮助了@MattInamdar,好的,我现在就这么做