使用阿里云 OSS 服务搭建博客图床

此前使用单独的 GitHub 仓库作为博客的图床,配合 jsDelivr 的免费 CDN 服务,访问起来没感到什么卡顿,并且还免费,存储空间用来放几百张图片也完全够用,唯一需要担心的是 jsDelivr 的 GitHub 仓库加速初衷是用来加速 js/css 等小文件的,用来当图床有悖初衷,有滥用嫌疑,后续也有被 jsDelivr 官方禁用的风险。

但是使用 Typora 配合 PicGo 一键批量上传本地图片到 GitHub 仓库的成功率实在太低了。上传速度慢不说,经常连着上传好多次都失败,而 Typora 又不支持断点续传,下次又要重复上传已经成功上传的图片,使 GitHub 仓库中出现大量重复的图片。刚开始以为是 PicGo 的问题,并且每次 PicGo 报错日志都不一样。去 PicGo 的 issue 搜索了一下报错信息,作者的回复是“网络原因导致,能顺利访问 GitHub 主站,不代表能顺利访问 GItHub API 地址”,即使使用了代理一次上传批量上传多张(多次实验得到的结论是一次上传最好不要超过 30 张)还是容易失败,只能把图片拆分多次分别上传。

但是更换几次网络环境还是问题依旧,终于,在经历一次连续几天的上传失败后终于忍无可忍,遂想着购买 OSS 服务来存储图片,之前尝试过七牛的 OSS 服务,虽然有免费空间,但是要自己的域名经过备案才让使用,否则只能使用七牛的子域名,最要命的是这个域名是临时的,一个月更换一次,意味着每个月得去替换博客中图片地址。因为自己的域名没备案,也懒得去备案,遂放弃七牛云。看了看腾讯和阿里的 OSS 产品,阿里的更加便宜,并且支付宝登录付款也安全方便。最后选择了阿里云 OSS 产品。

登录阿里云,在产品 -> 存储 -> 中选择对象存储 OSS,开通服务。

image-20210226165835593

右上角进入阿里云控制台,左边列表中选择对象存储 OSS。

image-20210226174816254

点击左侧菜单的 Bucket 列表,创建一个新的 Bucket,一个 Bucket 可以理解为一个单独存储仓库,这个仓库可以用来存放任何文件,不只是图片。注意:Bucket 名称要全网唯一,读写权限改为公共读。

image-20210226175332347

接下来需要获取阿里云账户 AccessKey ID 和 AccessKey Secret,这样就可以使用 PicGo 来管理仓库了。建议在当前账户创建一个 RAM 子账号,使用子账号的 AccessKey 更加安全。具体操作可以看阿里云的官方帮助:阿里云:如何获取AccessKey ID和AccessKey Secret阿里云:创建RAM用户

打开 PicGo 的图床设置,填入上面提到的相关信息。

image-20210226181918717

存储空间名称即 Bucket 名称,存储区域和当初创建 Bucket 时选择的地域有关,可以进入自己刚才创建的 Bucket 概览页面查看。

image-20210226182251848

然后在 PicGo 上传区中选择阿里云 OSS 作为默认上传图床。

image-20210226182534736

至此 PicGo 设置完毕,使用 Typora 一键上传文章中所有本地图片,20 张图片几乎秒传,再也没碰到过各种上传失败了,看来之前真是错怪 PicGo 了。

image-20210226183058424

注意:不要同时打开多个 Typora 窗口批量上传图片,否则可能在 PicGo 重命名图片上出现两张同名的图片发生覆盖的情况。

有一个无伤大雅的小问题是,如果直接在新标签页中打开图片会被强制下载,绑定自定义域名可以解决这个问题,但是绑定的域名需要经过备案。详见:阿里云:访问OSS资源后资源被强制下载

image-20210226185319437

使用几天后发现,如果博客只是搭给自己看的,没什么访问量的话,选择按量付费,经过抹零后甚至一分钱都不用花。

image-20210226184555215

image-20210226184734486

后记 1:2021 年 12 月的某一天遭遇恶意的流量盗刷,一小时内被刷了几百个 GB,由于阿里云的计费策略有延迟,即使预存的余额扣完也不会停服,而是继续扣费,最终欠费了几十块。当初考虑用 OSS 当图床也考虑过盗刷问题,但是想到只是个人博客,也没什么访问量,应该不会被盯上,但是还是低估了社会险恶,尤其是在网络匿名环境下作恶几乎没有成本。只要设置公共读就有被盗刷的风险,即使是设置了 referer 限制,伪造 referer 头请求也没什么难度。暂时没有找到什么好办法能解决 OSS 搭建图床可能存在的盗刷问题,决定转回 GitHub 仓库图床或者在 VPS 上自建图床了。

后记 2:2021 年 12 月 20 号,由于 jsDelivr 的 ICP 证书被吊销造成大陆节点失效,出现了几个小时的服务断供。现在 CDN 服务国内访问 jsDelivr 都是使用香港或者日本等周边节点,加速效果大打折扣,但是还是处于可用状态。正如前面所担心的禁用风险,jsDelivr 下一步是配合国内电信部门整改上线更严格的使用政策或是直接被墙还是未知数,且用且珍惜。

参考

  1. 知乎:阿里云oss搭建图床以及使用PicGO上传图片到图床
  2. 修改存储空间读写权限
  3. 攻击事件简短分析|为什么恶意盗刷CDN/OSS/COS流量行为日益增加?
  4. 阿里云对象存储 OSS 限流超过阈值自动关闭【防破产,保平安】
  5. jsDelivr 备案被吊销后,网页静态资源何去何从

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!