CloudFront Multi-tenant 与标准模式详解

0 阅读2分钟

CloudFront 标准模式与 Multi-tenant 模式详解

一、背景

在使用 Amazon CloudFront 做 CDN 加速时,通常有两种模式:

  • 标准模式(Standard CloudFront)
  • 多租户模式(Multi-tenant CloudFront)

本文基于实际操作,从:

  • CDN 原理
  • 标准 CloudFront 使用
  • Multi-tenant 实战
  • 缓存机制
  • SaaS 架构设计

进行完整讲解。


二、核心区别

模式描述
标准 CloudFront一个 Distribution 对应一个业务
Multi-tenant一个 Distribution 支持多个业务(tenant)

👉 本质:

  • 标准:资源隔离
  • 多租户:资源复用 + 逻辑隔离

三、标准 CloudFront 实战

3.1 原始状态(无 CDN)

首先搭建一个 Web 服务,并创建一个站点:

https://ceshi1827.xingfu.com/

此时:

  • 域名直接解析到服务器 IP
  • 请求直接访问源站(EC2)

📌 页面如下:

屏幕截图 2026-04-08 191117.png


3.2 修改源站资源

替换网站中的图片资源(例如交换两张图片名称)

📌 文件变化:

image1.png ↔ image2.png

3.3 刷新页面结果

关闭浏览器重新访问:

👉 页面已经更新(因为没有缓存)

📌 页面效果:

屏幕截图 2026-04-08 200740.png


四、引入标准 CloudFront

4.1 架构变化

客户端 → CloudFront → 源站(EC2)

域名解析变为:

ceshi1827.xingfu.com → dxxxxx.cloudfront.net

4.2 CDN 工作机制

CloudFront 会缓存:

  • HTML
  • JS / CSS
  • 图片等静态资源

4.3 再次修改源站

再次替换图片资源。


4.4 页面访问结果

刷新页面后:

❌ 页面没有变化

📌 页面效果:

屏幕截图 2026-04-08 200740.png


4.5 原因分析

因为:

CloudFront 缓存了旧资源

4.6 解决方法:缓存失效

进入 Distribution:

👉 Invalidation → Create Invalidation

本质:

删除 CDN 缓存 → 强制回源

五、Multi-tenant CloudFront 实战

5.1 架构

一个 Distribution
   ↓
多个 tenant
   ↓
多个域名

示例:

alextest
 ├── cloudfront1 → ceshi1827.filmtest.cc
 └── cloudfront2 → ceshi2873.filmtest.cc

5.2 关键区别

  • 所有 tenant 共用一个 Distribution
  • 每个 tenant 绑定自己的域名
  • 请求通过域名路由到 tenant

5.3 Endpoint 说明

Multi-tenant 下:

  • 所有 tenant 共用一个 Endpoint
  • 类似标准 CloudFront 的 dxxxxx.cloudfront.net

5.4 初始状态

创建:

  • cloudfront1
  • cloudfront2

此时两个 tenant 页面一致。

📌 页面:

屏幕截图 2026-04-08 191117.png


5.5 修改源站资源

替换图片资源。


5.6 页面访问结果

刷新:

❌ 页面仍为旧内容

原因:

CDN 缓存未更新

5.7 只刷新 cloudfront2

使用 AWS CLI:

aws cloudfront create-invalidation-for-distribution-tenant \
  --id "dt_xxx" \
  --invalidation-batch '{
    "Paths": {
      "Quantity": 1,
      "Items": ["/*"]
    },
    "CallerReference": "'$(date +%s)'"
  }' \
  --profile cloudfront1

5.8 刷新结果

tenant页面
cloudfront1❌ 旧
cloudfront2✅ 新

📌 页面:

屏幕截图 2026-04-09 172325.png

屏幕截图 2026-04-08 191117.png


六、缓存机制详解(重要修正)

CloudFront 缓存基于:

Cache Key = Host + Path + Query + Header

6.1 Multi-tenant 缓存逻辑

不同 tenant:

ceshi1827.filmtest.cc ≠ ceshi2873.filmtest.cc

👉 Host 不同 → Cache Key 不同

👉 缓存天然隔离


6.2 正确认识缓存

说法正确性
tenant 缓存完全共享
tenant 缓存完全独立
按 Host 隔离

七、实现真正多租户(核心)

7.1 原理

CloudFront 转发:

Host: a.example.com

7.2 Nginx 配置

server {
    server_name a.example.com;
    root /var/www/a;
}

server {
    server_name b.example.com;
    root /var/www/b;
}

7.3 目录结构

/var/www/a
/var/www/b

7.4 效果

不同域名返回不同内容。


八、SaaS 架构设计(进阶)

推荐架构:

CloudFront(Multi-tenant)
        ↓
ALB
        ↓
EC2集群
        ↓
Nginx / 应用

九、CLI 操作总结

获取 tenant ID

aws cloudfront get-distribution-tenant \
  --identifier cloudfront1 \
  --query 'DistributionTenant.Id' \
  --output text \
  --profile cloudfront1

刷新缓存

aws cloudfront create-invalidation-for-distribution-tenant \
  --id <tenant-id> \
  --invalidation-batch '{
    "Paths": {
      "Quantity": 1,
      "Items": ["/*"]
    },
    "CallerReference": "'$(date +%s)'"
  }'

十、总结

  • Distribution = CDN 实例
  • Tenant = 子业务
  • Multi-tenant = 多业务共享 CDN
  • 缓存按 Host 隔离
  • 支持 SaaS 架构

十一、适用场景

  • SaaS 平台
  • 多客户系统
  • 白标网站
  • 多品牌平台

以上内容最后是用AI优化过的 (完)