背景
图床是一个托管博客图片的地方,常见图床有新浪微博、七牛云、SM.MS 等。
但是天下没有免费的午餐,免费图床总有各种问题(比如我的微博图床抢救),于是决定自己建一个图床。这里使用的是 AWS 的 S3 和 CloudFront。
为什么选择 AWS S3
- 国内云的带宽费用普遍高于海外云
- 相比于国内云,AWS 的合规性更好
为什么不使用 CloudFlare
- 目前体量较小,S3 更实惠
简介
AWS S3
AWS S3 是一个弹性、高扩展的对象存储服务。它可以存储任何类型的数据,包括图片、音频、视频、文档等等。用户可以在 AWS 控制台中轻松地创建和管理存储桶,上传和下载数据,进行权限管理和数据备份等操作。S3 的可用性和耐久性非常高,可以保证数据的安全和可靠性。
AWS CloudFront
AWS CloudFront 是一个全球内容分发网络,可以帮助用户加速静态和动态内容的分发。用户可以将静态和动态内容存储在 S3 中,并通过 CloudFront 分发到全球各地的用户。CloudFront 可以自动缓存内容,提高访问速度,同时保证内容的安全性和可靠性。用户可以在AWS控制台中轻松创建和管理分发,设置缓存策略、安全性控制和报告等。
综上,我们利用 S3 作云存储,利用 Cloudfront 做 CDN(内容分发网络),实现一个安全、可靠、高速的图床。
步骤概述
- 创建一个 AWS 账号
- 在 AWS 中创建一个 S3 bucket
- 创建 cloudfront distribution 并绑定 S3 bucket
- 创建 DNS 记录,绑定 cloudfront 自定义域名
详细步骤
接下来详细介绍一下
注册账号
之前的博客中有相关介绍,这里我们注册的是 Global 账号。
Q:能不能注册中国区账号
A:亚马逊中国审核比较严格,考虑到备案等因素,建议使用全球亚马逊
Q:全球亚马逊是否必须使用外汇卡
A:之前必须使用 Visa,现在也可以使用人民币
创建 S3 存储桶
在控制台主页搜索 “S3”,并进入 S3 控制台:
在存储桶控制台选择 “创建存储桶”:
在存储桶权限相关设置的位置,如果有不清楚的地方,就直接按照 AWS 给出的推荐进行设置,比如开启 “阻止所有公开访问权限”:
关闭存储桶公网访问,所有的公网流量全部走 Cloudfront,很大程度上保护了存储桶安全。
创建 Cloudfront 内容分发网络
控制台主页搜索,进入 cloudfront 控制台:
创建分配
分配源域
创建分配时第一步要选择 “源”,默认会给出 S3 的源域,直接选择即可:
设置来源身份访问
前面我们设置了禁止存储桶公网访问,这里我们就使用 “来源访问控制设置” 或者 “Legacy access identities” 进行访问控制(途中第二项或者第三项),不要直接公开存储桶。
后续设置和分发性能相关,按需设置即可
自定义域名
找到相关分配 ➡️ 编辑设置 ➡️ 备用域名
注意,使用自定义域名时,需要把自定义的域名 CNAME 解析到原有的 cloudfront 域名中,否则会设置失败
自定义 SSL 证书
往下拉一点就会有证书选项,自己没有证书的话直接请求公网证书即可。注意这里也需要对域名进行 CNAME 解析验证,按照 AWS 提示进行相关设置即可。
验证
完成上述步骤后,S3 应该为禁止公网访问:
Cloudfront 有已分配的域名和备用域名:
此时我们上传一张图片到 S3 中,直接访问 S3 的 url 是不行的:
换成 cloudfront 的域名,可以访问:
此时我们图床的设置已经完成辣!
其他设置
关于 Typora 编写 Markdown 快速插图的问题,可以使用 PicGO 等插件。
个人感觉体验还行,支持剪贴板直接上传,具体使用看这里