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

如何通过CloudFormation配置CloudFront按请求主机名区分源站

可以通过添加CacheBehaviors实现该需求

你可以通过配置带Host头匹配的自定义缓存行为,将不同主机名的请求路由到对应的源站。具体配置思路是:添加两个自定义缓存行为,分别对应两个主机名,同时将Host头纳入缓存键,让CloudFront能区分不同主机的请求并路由到指定源。

修改后的CloudFormation配置示例:

AppDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
        DistributionConfig:
            Origins:
                - DomainName: !Ref ALBDomainName1
                  Id: ALBOrigin1
                  CustomOriginConfig:
                      OriginProtocolPolicy: https-only
                      OriginSSLProtocols:
                          - TLSv1.2
                - DomainName: !Ref ALBDomainName2
                  Id: ALBOrigin2
                  CustomOriginConfig:
                      OriginProtocolPolicy: https-only
                      OriginSSLProtocols:
                          - TLSv1.2
            Aliases:
                - "1.hostname.com"
                - "2.hostname.com"
            # 自定义缓存行为:按顺序匹配请求
            CacheBehaviors:
                # 匹配1.hostname.com的所有请求,路由到ALBOrigin1
                - PathPattern: "*"
                  TargetOriginId: ALBOrigin1
                  AllowedMethods:
                      - GET
                      - HEAD
                      - OPTIONS
                      - PUT
                      - PATCH
                      - POST
                      - DELETE
                  ForwardedValues:
                      QueryString: False
                      Cookies:
                          Forward: none
                      Headers:
                          - Host # 转发Host头并纳入缓存键
                  ViewerProtocolPolicy: redirect-to-https
                  MinTTL: 0
                  DefaultTTL: 60
                  MaxTTL: 60
                  ResponseHeadersPolicyId: "123123"
                # 匹配2.hostname.com的所有请求,路由到ALBOrigin2
                - PathPattern: "*"
                  TargetOriginId: ALBOrigin2
                  AllowedMethods:
                      - GET
                      - HEAD
                      - OPTIONS
                      - PUT
                      - PATCH
                      - POST
                      - DELETE
                  ForwardedValues:
                      QueryString: False
                      Cookies:
                          Forward: none
                      Headers:
                          - Host # 转发Host头并纳入缓存键
                  ViewerProtocolPolicy: redirect-to-https
                  MinTTL: 0
                  DefaultTTL: 60
                  MaxTTL: 60
                  ResponseHeadersPolicyId: "123123"
            # 默认缓存行为:仅当自定义行为不匹配时触发(此处实际不会触发)
            DefaultCacheBehavior:
                AllowedMethods:
                    - GET
                    - HEAD
                    - OPTIONS
                    - PUT
                    - PATCH
                    - POST
                    - DELETE
                TargetOriginId: ALBOrigin1
                ForwardedValues:
                    QueryString: False
                    Cookies:
                        Forward: none
                ViewerProtocolPolicy: redirect-to-https
                MinTTL: 0
                DefaultTTL: 60
                MaxTTL: 60
                ResponseHeadersPolicyId: "123123"

关键配置说明

  • 缓存行为顺序:CloudFront会按从上到下的顺序匹配缓存行为,这里两个行为都用PathPattern: "*",但通过Host头作为缓存键的一部分,CloudFront能区分不同主机的请求,路由到对应源站。
  • Host头处理:必须在ForwardedValues.Headers中包含Host,这样源站ALB能正确识别请求主机名,同时CloudFront会将Host作为缓存键的一部分,避免不同主机的请求互相干扰。
  • 简化配置(推荐):你可以用CloudFront托管缓存策略替代ForwardedValues,比如托管策略Managed-CachingOptimizedForUncompressedObjects(ID:658327ea-f89d-4fab-a63d-7e88639e58f6)已包含Host头,配置更简洁。

额外注意:确保你的SSL证书已覆盖这两个主机名,CloudFront才能正常处理HTTPS请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:10:21