如何配置AWS CloudFront基于Host头值实现差异化缓存及函数配置
CloudFront按Host头配置差异化缓存的实现方案
一、用Cache Behaviors + Cache Policies实现核心逻辑
你需要创建两个Cache Behaviors和对应的Cache Policies,按Host头匹配请求并应用不同缓存规则:
1. 创建两个Cache Policies
针对api.domain.com的无缓存策略
- 缓存TTL设置:默认TTL、最小TTL、最大TTL全部设为0
- 缓存键设置:无需额外配置(已通过Host头匹配行为,无需将Host加入缓存键)
- 其他设置:通过TTL=0强制禁用缓存
针对web.domain.com的24小时缓存策略
- 缓存TTL设置:默认TTL、最小TTL、最大TTL全部设为86400秒(24小时)
- 缓存键设置:可选将Host头加入缓存键(进一步保证缓存隔离,更严谨)
- 其他设置:按需开启压缩、缓存GET/HEAD方法等
2. 配置Cache Behaviors
CloudFront的Behaviors按顺序匹配,需把这两个自定义Behavior放在默认Behavior之前:
第一个Behavior(匹配api.domain.com)
- 路径模式:
*(如果API有特定路径,比如/api/*,可设置更精准的匹配规则) - 匹配条件:添加「Host头」条件,值设为
api.domain.com - 关联缓存策略:选择刚才创建的无缓存策略
- 其他设置:Viewer Protocol Policy按需设为
Redirect HTTP to HTTPS
- 路径模式:
第二个Behavior(匹配web.domain.com)
- 路径模式:
*(或对应前端业务路径) - 匹配条件:添加「Host头」条件,值设为
web.domain.com - 关联缓存策略:选择24小时缓存策略
- 路径模式:
二、是否需要CloudFront Function/Lambda Edge修改Cache-Control头?
这取决于后端(EC2)返回的响应头:
- 如果后端已针对
api.domain.com返回Cache-Control: no-cache, no-store,针对web.domain.com返回Cache-Control: public, max-age=86400,无需额外修改,CloudFront会遵循缓存策略与后端头的组合规则。 - 如果后端返回的Cache-Control头不符合需求(比如web端返回短TTL、API端返回缓存头),需用CloudFront Function修改响应头(Lambda Edge成本更高,不适合这类简单场景)
用CloudFront Function修改响应头的操作步骤
创建CloudFront Function
- 进入CloudFront控制台,选择「Functions」,点击「Create function」
- 命名为
ModifyCacheControlByHost,运行时选cloudfront-js-1.0,点击「Create function」
编写函数代码(绑定Viewer Response事件)
function handler(event) { const response = event.response; const requestHost = event.request.headers.host.value; if (requestHost === 'api.domain.com') { // 强制禁用缓存 response.headers['cache-control'] = { value: 'no-cache, no-store, must-revalidate' }; response.headers['pragma'] = { value: 'no-cache' }; response.headers['expires'] = { value: '0' }; } else if (requestHost === 'web.domain.com') { // 设置24小时公共缓存 response.headers['cache-control'] = { value: 'public, max-age=86400' }; } return response; }
- 发布并关联到Behaviors
- 点击「Publish」,选择「Live」环境
- 回到CloudFront分发的Behaviors设置,编辑对应的两个Behavior,在「Function associations」中:
- 事件类型选
Viewer Response - 函数类型选
CloudFront Function - 选择刚才创建的函数
- 事件类型选
注意事项
- Behavior优先级:确保两个自定义Behavior排在默认Behavior前面,否则会被默认规则覆盖
- 路径匹配:如果业务有特定路径规则,可调整路径模式实现更精准的请求匹配
- 测试验证:可用CloudFront的「Test Function」功能验证逻辑,或通过浏览器开发者工具查看响应头的Cache-Control值
内容的提问来源于stack exchange,提问作者Ajit Kumar
相关产品推荐
相关产品推荐

