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

如何配置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修改响应头的操作步骤

  1. 创建CloudFront Function

    • 进入CloudFront控制台,选择「Functions」,点击「Create function」
    • 命名为ModifyCacheControlByHost,运行时选cloudfront-js-1.0,点击「Create function」
  2. 编写函数代码(绑定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;
}
  1. 发布并关联到Behaviors
    • 点击「Publish」,选择「Live」环境
    • 回到CloudFront分发的Behaviors设置,编辑对应的两个Behavior,在「Function associations」中:
      • 事件类型选Viewer Response
      • 函数类型选CloudFront Function
      • 选择刚才创建的函数

注意事项

  • Behavior优先级:确保两个自定义Behavior排在默认Behavior前面,否则会被默认规则覆盖
  • 路径匹配:如果业务有特定路径规则,可调整路径模式实现更精准的请求匹配
  • 测试验证:可用CloudFront的「Test Function」功能验证逻辑,或通过浏览器开发者工具查看响应头的Cache-Control值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:16