You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置CloudFront将Host头转发至Lambda Function URL源站

解决CloudFront转发Lambda Function URL时的真实Host头传递问题

问题根源

Lambda Function URL要求源请求的Host头必须严格匹配其自身的域名(如xxxxxxxx.lambda-url.eu-central-1.on.aws),直接使用托管的AllViewer源请求策略会将自定义域名的Host头转发给Lambda,触发Lambda的域名验证逻辑,导致返回Message: null错误。

解决方案

需要自定义源请求策略,同时实现两个核心目标:

  1. 确保CloudFront发送给Lambda的Host头是Lambda Function URL的域名,满足Lambda的验证要求
  2. 通过自定义请求头(如X-Forwarded-Host)将用户请求的真实自定义域名Host传递给Lambda后端

具体配置修改(CloudFormation示例)

  1. 添加自定义源请求策略资源
CustomOriginRequestPolicy:
  Type: AWS::CloudFront::OriginRequestPolicy
  Properties:
    OriginRequestPolicyConfig:
      Name: LambdaFunctionUrlOriginRequestPolicy
      Comment: "转发Viewer头(除Host),添加X-Forwarded-Host传递真实Host"
      HeadersConfig:
        HeaderBehavior: whitelist
        Headers:
          # 按需添加需要转发的Viewer头
          - Accept
          - Accept-Language
          - Origin
          - Referer
          # 自定义头,用于传递真实Host
          - X-Forwarded-Host
      CookiesConfig:
        CookieBehavior: none
      QueryStringsConfig:
        QueryStringBehavior: all
  1. 修改CloudFront分发的默认缓存行为
    更新DefaultCacheBehavior,关联自定义源请求策略,并显式设置发送给Lambda的Host头为其自身域名:
DefaultCacheBehavior:
  TargetOriginId: LambdaOrigin
  CachePolicyId: '4135ea2d-6df8-44a3-9df3-4b5a84be39ad' # 保留原无缓存策略
  ViewerProtocolPolicy: redirect-to-https
  SmoothStreaming: 'false'
  Compress: 'true'
  # 关联自定义源请求策略
  OriginRequestPolicyId: !Ref CustomOriginRequestPolicy
  # 强制设置Host头为Lambda Function URL的域名
  OriginCustomHeaders:
    - HeaderName: Host
      HeaderValue: !Select [2, !Split ["/", !GetAtt ApiLambdaFunctionUrl.FunctionUrl]]
  1. Lambda后端适配
    在Lambda代码中读取X-Forwarded-Host获取真实的自定义域名Host,示例(Python):
def lambda_handler(event, context):
    # 优先取自定义头中的真实Host, fallback到默认Host
    real_host = event['headers'].get('x-forwarded-host') or event['headers']['host']
    # 后续业务逻辑使用real_host
    return {
        'statusCode': 200,
        'body': f"真实访问域名:{real_host}"
    }

关键说明

  • 禁止直接转发Viewer的Host头给Lambda,必须保留Lambda Function URL的Host以通过域名验证
  • 自定义头传递真实Host是标准适配方案,后端需对应读取该字段
  • 自定义源请求策略中的白名单头可根据业务需求调整,仅转发必要的请求头

内容的提问来源于stack exchange,提问作者Peterhack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:36:20