amazon-web-services - 如何显示托管在 S3 中的静态网站的先前版本
问题描述
我目前已将静态网站的第 1 版和第 2 版上传到启用了版本控制的 S3 存储桶中。默认情况下,访问者访问 S3 url 时会显示其网站的第 2 版。有没有办法以编程方式或通过控制台将其设置为显示版本 1?
解决方案
您可以通过在请求中添加版本来访问 S3 中文件的特定版本,例如http://example.cloudfront.net/image.png?verisonId=[id]
.
您还需要设置一个存储桶策略,允许您的 CloudFront 分配访问版本化对象:
{
"Version":"2012-10-17",
"Id": "CloudFrontAccessToVersionedObjects",
"Statement": [{
"Action": ["s3:GetObject", "s3:GetObjectVersion" ],
"Effect": "Allow",
"Principal":{"CanonicalUser":"<CLOUDFRONT CANONICAL ID>"},
"Resource": "<BUCKET>",
"Sid": "CloudFrontAccess"
}]}
应用存储桶策略后,您需要使缓存无效。
附带说明一下,假设您总是想使用特定版本,那么无需对现有代码进行任何更改即可实现此功能的快速方法是使用查看器请求 Lambda@Edge 重写请求,然后再将其传递给您的 S3 来源,将 附加versionId=[id]
到 S3 来源的所有请求。
推荐阅读
- r - 无法让 IRkernel::installspec() 工作,jupyter-client 不可见
- java - JAVA 崩溃 - hs_err_pid*.log
- netty - 理解 Netty - 发送和接收对象
- python - Pandas - 当字符串与格式匹配时出现“时间数据与格式不匹配”错误?
- javascript - Owl-Carousel 过渡倒退
- java - Java 8 流列表
到地图 > 有条件分组依据 - swift - RxSwift - 处理订阅是否会导致底层序列发出 onComplete?
- machine-learning - 在 KERAS 中运行训练后加载权重,无法识别上一次运行中达到的最高准确度水平
- javascript - THREE.js 克隆具有儿童和更多材料的父网格
- elasticsearch - Elasticsearch:参数“include”不区分大小写