013-关于图床的最终抉择
一. 前言
1.1 更新日志
- 【20230406更新】又发现一个免费而且非常靠得住的图床网站:Unsplash,把图片上传到个人主页即可复制图片链接,前提是自己的图片,不能有版权纠纷,严禁各种违规图片,以下是所有类似网站:
1.2 先说几个前提:
- 想长久使用(害怕服务商跑路,数据丢失)
- 可以接受少量付费,大概一年30元
- 喜欢折腾,因为oss配置起来很麻烦,懒人绕行
- 有阿里云的域名、服务器更好
我的最终选择:阿里云OSS
二. 使用过的图床
前两个就目前(2023-03-14 19:04)而言还很好用,对于流量很小的博客来说,基本上免费。去不图床是订阅制,需要花钱买存储量。优酷只能用来存视频,还可以设置密码,嵌入文章中还可以切换清晰度等,还不错。
但总的来说写博客重要的还是图片,要想长久保存,不担心商家跑路,数据丢失,那无疑是选择大厂,最大的厂——阿里云。
三. 选择阿里云的理由
- 域名codertoro.top
- 轻量云服务器ECS(乌兰察布)
- 对象存储OSS
由于我的域名和服务器都是在阿里云,那么把图床(对象存储)也建在阿里云就会非常方便(比如域名证书上传,非常详细的教程,钉钉客服答疑等等),一站式服务是非常方便的。同时阿里云嘛,这辈子不用担心倒闭跑路,而且价格很低。
当然大家也可以货比三家,国内类似大厂还有腾讯云,百度云,七牛云等,尽量一站式服务,很省心。
四. OSS费用
这里简单的介绍一下OSS的费用,主要包括存储费,流量费,访问次数费,CDN加速的流量费(CDN加速还是建议开的),具体费用戳这里。
付费方式包括【包年包月】和【按量付费】两种,存储建议选择包年,流量建议选择按量付费。
4.1 存储费
- 建议选择【包年包月】
- 40G,9元,一年,标准存储包(中国大陆)
- 这40G中图片应该只占一小部分存储空间,剩余的空间可以用来抵扣云服务器的快照(服务器的备份)
- 如果一年后存储包过期,存储桶中还有东西,就会按照【按量付费】标准收费,所以需要一直续费【标准存储包】,即每年固定花销9元
- 购买链接
4.2 流量费
- 两个概念:上传和下载流量,外网和内网流量
- 组合起来就有四种流量类型,即外网上传流量,外网下载流量,内外上传流量,内网下载流量。
- 费用:上传流量免费,内网流量免费
- 结论:只有外网下载或在线预览(本质也是下载)流量收费,而且不贵
- 重点:内网免费,即存储桶和服务器属于同一个地域,就可以使用内网下载或预览,完全免费
- 教程:如何通过内网访问oss资源见第五点
4.3 访问次数费和CDN加速费
- 想达到收费档次的访问次数没那么容易,小白博客的访问量不配交访问次数费(狗头)
- CDN加速的流量费 50G,12元,一年,CDN/全站加速资源包
- 购买链接
五. 内网访问OSS资源
5.1 前提
- 有阿里云服务器,并且服务器和存储桶 同地域
- 方式二要求,有域名,并且已经备案
5.2 方式一(不推荐,可能存在无法使用的情况)
不使用oss自有域名,直接使用内网的EndPoint(eg. oss-cn-wulanchabu-internal.aliyuncs.com
)
示例:在markdown笔记中嵌入一张图片![](https://mybucket.oss-cn-wulanchabu-internal.aliyuncs.com/img.jpg)
使用内网域名在写文章时当然是无法预览图片的,只有部署到服务器才能看到。
5.3 方式二(推荐)
使用自有域名(如:img.codertoro.top),这样博客中所有图片都是使用的自己的域名,如果给自有域名添加一个静态页面(可选操作,教程),那么访问自有域名跳转到自己的图片网站,美观+大气+好记,关键还能添加CDN加速。
步骤如下:
- 创建和自己服务器同一地域下的存储桶mybucket,权限为【公共读】
- 进入mybucket->bucket管理->域名管理->添加域名 img.domain.com(domain.com为自己的根域名)
- 依旧在本页面(域名管理)中,发现新增了一条域名配置,点击【证书托管】,上传证书(如何申请免费证书戳这里)
- 依旧在本页面(域名管理)中,点击CDN加速下的【未配置】,配置CDN加速,全程下一步即可,最后需要在DNS解析页面添加CNAME解析记录(不会添加阿里云有教程)。
- 等待几分钟CDN加速就配好了,进入CDN控制台->域名管理->img.domain.com(或者点击域名后面的【管理】)
- 基本信息->源站信息->删除原有的源站信息->点击【新增源站信息】->按照下图配置
- 回源配置->默认回源HOST->确保【默认回源HOST】和上图中的【自定义源站】(即内网域名)一致
- 访问控制->防盗链->仿照下图配置,白名单应为自己博客域名及其泛域名->注意:不可开启【允许通过浏览器地址栏直接访问资源URL】,这样可能会存在通过浏览器地址栏恶意的不停访问导致流量激增的情况
- 进行https配置,【性能优化】和【视频相关】可以根据提示有选择的开启
- 使用方法:
![防盗链配置](https://img.codertoro.top/Bucket/img/material/013-%E5%85%B3%E4%BA%8E%E5%9B%BE%E5%BA%8A%E6%9C%80%E7%BB%88%E6%8A%89%E6%8B%A9/iShot_2023-03-14_20.28.46.jpg)
5.4 拓展(可选)
由于 img.domain.com 源站为内网,而且还有防盗链,这就导致我们自己想预览图片在文中的效果都无法操作。
解决方法:
重复方式二,再绑定一个oss自由域名 second.domain.com ,其源站为默认的外网EndPoint不用改,不用设置防盗链。这样任何人都可以使用该域名访问oss资源,所以该域名要保密,保密,保密。
使用方法:
当我们像预览某个图片时,只需要将图片链接img.domain.com中的【img】改成【second】图片就可以访问了。确定排版或图片内容无误后,一定要改回【img】。
5.5 判断是否为内网访问的方法
这部分还是很重要的,博客中能访问资源并不代表一定是通过内网访问,还是要看oss访问日志,日志是不会骗人的。
- 对象存储控制台->Bucket 列表->mybucket->日志管理->实时查询->免费开通
- 清除浏览器缓存,进入博客中访问几次【使用了img.domain.com】的oss资源
- 重点看以下字段来判断是否是内网访问:
- host:
- 如果显示类似oss-cn-wulanchabu-internal.aliyuncs.com的内网域名,则是内网访问。如果是oss-cn-wulanchabu-cross.aliyuncs.com 说明是跨域访问,说明配置是有问题的,检查CDN源站是否是内网域名。
- http_status:
- 如果host是-internal,但http_status是403,可能是直接在浏览器地址栏输入oss资源地址触发防盗栏而产生的403,此时的host并不能说明这是内网访问。只有host是-internal,http_status是2**,才能说明内网访问成功。
- 其他字段可阅读该文档
六. 后续发现的一些问题
6.1 设置防盗链后浏览器地址依旧可以预览
设置防盗链且没有勾选【允许通过浏览器地址栏直接访问资源URL】,但依旧可以通过浏览器地址栏访问,先清理浏览器缓存,如果还能访问,说明防盗链设置有误,正常来说,博客通过内网得到oss资源,会有该资源缓存,在地址栏访问会成功,但这访问的是浏览器缓存,不会产生额外流量,清除缓存后就403不能访问了。