使用Lambda@Edge将ALB作为自定义源时CloudFront返回502错误
CloudFront切换自定义源到ALB报502错误的排查方案
1. 网络层面拦截检查
- ALB安全组必须允许CloudFront官方IP段访问3000端口。可通过AWS CLI命令获取CloudFront前缀列表:
aws ec2 describe-prefix-lists --prefix-list-ids pl-63a5400a,将对应的IP范围加入ALB安全组的入站规则。 - 检查ALB所在VPC的网络ACL:入站规则放行CloudFront IP的3000端口流量,出站规则放行返回流量到CloudFront IP。
2. Lambda@Edge源配置细节验证
- 协议与端口匹配:若ALB的3000端口监听的是HTTP协议,需将Lambda配置中的
protocol: 'https'改为protocol: 'http'——SSL握手不匹配是502常见诱因。 - Host头确认:若ALB目标组依赖Host头路由,需确保
request.headers['host']的value与目标组路由规则一致(直接访问正常的话此点大概率没问题,但可交叉验证)。 - 源请求阶段的Lambda@Edge需部署在
us-east-1区域,否则可能出现跨区域配置同步问题。
3. CloudFront自定义源配置校验
- 确认CloudFront后台添加的自定义源:域名、端口、协议策略需与Lambda代码中的配置对齐。即使Lambda会覆盖源配置,后台基础配置错误仍可能引发冲突。
- 若启用了Origin Shield,需确保Origin Shield所在区域能正常访问ALB(可临时关闭Origin Shield测试)。
4. 日志定位问题
- 查看CloudFront日志:重点关注502错误的细分代码,比如
502.501表示SSL握手失败,502.503表示源超时,502.504表示源无响应。 - 查看ALB访问日志:若日志中无CloudFront的请求记录,说明网络拦截;若有请求但返回错误,需排查ALB到ECS服务的链路。
5. Lambda权限与执行环境检查
- 确认Lambda@Edge的IAM角色包含
cloudfront:UpdateDistribution及边缘函数执行所需的基础权限,避免因权限不足导致源修改未生效。 - 检查Lambda代码是否有语法错误或逻辑漏洞,比如未正确覆盖
request.origin的所有必要字段。
内容的提问来源于stack exchange,提问作者Ezechiel
相关产品推荐
相关产品推荐

