新浪图床忽然不给外链了后,我便转向了github图床,但github图床外链经常被墙,导致wordpress博客访问量下降,我决定自建一个可自定义域名的免费CDN加速的外链图床。
图床指的就是储存图片的服务器,网站管理员为了方便维护和管理,会将图片存放在专门的服务器集群里,通常还会在外层套层 CDN 做分发。市面上的公开图床很多,例如 imgur、sm.ms、imgbox 等等,这些图床都开放了 API 方便开发者调用。不过由于运营成本问题,也有不少图床相继倒闭或者转入收费。
怎么自建图床?如果是有VPS主机服务器,安装个 Chevereto 开源图床网站程序即可。但这是VPS单纯用来做图床给博客外链图片用,有点浪费且不易长久。图片存储最好是放在大公司的云服务平台上, Backblaze B2 是一个云存储解决方案,类似于Amazon AWS S3, 但是价格稍微便宜一些. Backblaze的云存储每个注册用户拥有10G免费空间以及每天1G的下载流量,上传流量不限。超过免费额度后的价格以及与其他几家主流商家的对比见下图。
在backblaze存储1T的内容也仅需$5/月,不过流量费还是比较贵的 ,上传流量不限。 由于 Bandwidth Alliance(带宽联盟),Backblaze 到 Cloudflare 之间的出口是完全免费的, 所以Backblaze B2可以配合cloudflare CDN来使用达到无限免费下载流量。
因此我们得到如下网盘/图床产品:
- 10G存储空间免费, 全球最可靠的云存储服务
- 上行免费
- 下行免费
- 可自定义域名
- 全球最强CDN加速
搭建自定义域名图床教程开始
首先,你需要有一个域名,选择一个子域名作为图床的域名。 关于图床的二级域名命名,一般有以下几种:
- img
- images
- assets
- static (不仅存放图片,还有存放 css、js)
然后,创建 Backblaze B2 Bucket(存储桶) 。
在 Backblaze’s B2 storage 注册一个账号,注册好了后,在后台面板选择 “Buckets”(存储桶),然后点击 “Create a Bucket”,创建一个存储桶。选Public,以便所有人可访问。
然后,回到 “Buckets(存储桶)” , 在你刚刚创建的存储桶上,点击 “Upload/Download(上传/下载)”. 上传一个临时的测试文件到存储桶中,然后在你刚上传的文件处,点击 “i(information,信息)”. 这是为了获取下一步需要的信息,你的存储桶处于哪台服务器上.
最后,获取到地址之后就登录cloudflare,给你的域名添加一个子域名,并新增一条cname记录,指向文件地址中的域名,例如将img.jiemahao.com通过cname到f000.backblazeb2.com,效果便是https://img.jiemahao.com/file/nilayp/img.jpg 指向 https://f001.backblazeb2.com/file/nilayp/img.jpg
根据上面截图中的记录, 我使用这个子域名 img.jiemahao.com作为图床的域名, 并且指向 f000.backblazeb2.com. 确保 Cloudflare 橙色保护盾是开启的状态, 这代表请求是通过了 Cloudflare 的 CDN 代理层. Cloudflare 默认的 TTL 将被设置为 auto(自动).
虽然启用了CloudFlare CDN,但发现缓存永远不能命中(MISS),我们需要对添加一个缓存指令(默认是不缓存),打开存储桶设置,桶信息设置为{"cache-control":"max-age=43200"}
,其中43200
单位为秒(s),意思就是说43200秒内CF不会去从源站重新获取资源。
Cloudfalre的ssl设置需要使用full,因为backblaze仅提供https访问地址。
当然你如果觉得文件链接不好看太长了,你也可以使用cloudflare自带的页面规则301 ,缩短链接地址,比如通过 https://img.jiemahao.com/img.jpg 直接访问 https://f001.backblazeb2.com/file/nilayp/img.jpg 。
例如匹配规则 https://img.jiemahao.com/*
重定向网址到 https://img.jiemahao.com/file/nilayp/$1
最后,请注意:Backblaze B2 流出到 Cloudflare 的流量是免费的,也就是说就算 CF 回源 B2 也没有 $0.01/GB 的流出流量费,相当于免费无限流量。不过这并不能阻止坏蛋直接用 B2 的域名(而不是套了 CF 的域名)刷流量。