AWS EC2+Apache部署场景下,如何清除CloudFront HTML缓存?
清除CloudFront中HTML页面缓存的可行方法
Hey there, let's walk through the practical ways to clear HTML page caches on CloudFront for your e-commerce and CMS sites hosted on Apache EC2. Here are the most reliable methods you can use:
方法1:通过AWS控制台手动创建缓存失效
这是最直观的方式,适合偶尔手动操作的场景:
- 登录AWS管理控制台,找到CloudFront服务入口
- 定位到对应你的电商/CMS站点的CloudFront分发
- 切换到失效标签页
- 点击「创建失效」按钮
- 在「对象路径」输入框里,按需指定要清除的HTML页面:
- 单页面清除:比如
/product-detail.html或者/cms/article/123.html - 批量清除所有HTML页面:用通配符
/*.html(提醒:这个会清除分发下所有HTML文件,确认需求后再用)
- 单页面清除:比如
- 点击「创建失效」,等待CloudFront完成缓存更新,通常需要2-15分钟,取决于分发规模
方法2:使用AWS CLI命令行工具
如果你习惯用命令行或者需要批量操作,AWS CLI会更高效:
- 先确保你的AWS CLI已经配置好对应权限(需要
cloudfront:CreateInvalidation权限) - 执行对应命令:
- 单页面缓存失效:
aws cloudfront create-invalidation --distribution-id YOUR_DISTRIBUTION_ID --paths "/product-detail.html" - 所有HTML页面缓存失效:
aws cloudfront create-invalidation --distribution-id YOUR_DISTRIBUTION_ID --paths "/*.html"
- 单页面缓存失效:
- 命令执行后会返回一个失效ID,你可以用它查询进度:
aws cloudfront get-invalidation --distribution-id YOUR_DISTRIBUTION_ID --id YOUR_INVALIDATION_ID
方法3:通过AWS SDK/API实现自动化清除
如果你的CMS或电商系统需要在发布内容后自动触发缓存清除(比如新文章上线时),可以用AWS SDK调用API来实现:
下面是Python(boto3)的示例代码:
import boto3 import datetime cloudfront_client = boto3.client('cloudfront') # 创建缓存失效请求 response = cloudfront_client.create_invalidation( DistributionId='YOUR_DISTRIBUTION_ID', InvalidationBatch={ 'Paths': { 'Quantity': 1, 'Items': [ '/cms/new-article.html' # 替换为你要清除的页面路径 ] }, 'CallerReference': f'invalidation-{datetime.datetime.now().isoformat()}' } ) print(f"缓存失效已提交,失效ID:{response['Invalidation']['Id']}")
注意:CallerReference需要是唯一值,这里用时间戳来保证,避免重复请求。
一些关键注意事项
- 权限控制:执行缓存失效的账号必须拥有
cloudfront:CreateInvalidation权限,建议通过IAM策略精准配置,避免过度授权 - 成本说明:CloudFront每月前1000次缓存失效是免费的,超出次数会按标准收费,所以尽量精准指定路径,减少不必要的全量失效
- 替代思路:如果不想频繁手动失效,可以在Apache中给HTML页面设置合理的
Cache-Control响应头(比如max-age=3600),同时给静态资源用版本化文件名(比如article-123-v2.html),这样新内容会被CloudFront自动拉取,无需手动清除缓存
内容的提问来源于stack exchange,提问作者Sudesh Lakmal Pathirana
相关产品推荐
相关产品推荐

