如何通过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
相关产品推荐
相关产品推荐

