简介
什么叫图床
图床就是将图片上传到相关服务商或者个人服务器,通过上传文件的网络地址进行远程访问。可以方便快速的将图片插入到文章中,方便后续图片二次使用、迁移、分享。
常用图床的几种方式
- VPS自建:通过购买服务器搭建图床程序,比如easyimage,lsky-pro等。
优点:方便,快捷,空间大
缺点:速度取决于vps的线路,迁移服务时大量数据需要迁移。 - 云端oss储存+cdn
优点:稳定,速度快
缺点:付费(腾讯cos/阿里oss+cdn(cdn需备案))。免费的额度有限(Backblaze B2 + Cloudflare)。 - Github + JsDelivr(cdn)
优点:github绝对稳定,jsdelivr充当github的cdn加速
缺点:虽然有加速,速度也算不上快,属中等。
本篇介绍Backblaze B2 + cloudflare +Picgo 方案
Backblaze B2免费用户有10GB的存储额度,和1天1GB的流量,一个月30GB的流量,对于小网站基本足够,超额的存储是$0.005/GB/月,流量是$0.01/GB。Cloudfare和Backblaze同属带宽联盟成员,借由Cloudfare向Backblaze请求数据基本不会消耗Backblaze的额度。这样通过cloudflare访问,只会想好的B类和c类的访问请求额度。
- Daily Storage Caps:日常存储容量前10GB免费
- Daily Download Bandwidth Caps:日常下载带宽前1GB免费
- Daily Class B Transactions Caps:日常B类事务前2500次免费(B类事务包括下载、获取文件)
- Daily Class C Transactions Caps:日常C类事务前2500次免费(C类事务包括创建存储桶、列举存储桶、列举文件版本、列举Keys)
实现目的
1.自由在MD,网站中引用图片(picgo上传)
2.防止恶意被刷流量(毕竟超出流量要付费)
- 自定义域名代替原域名(出现问题直接断开和原域名之间的跳转)
- 删除在url中真实路径名(backblaze访问路径里面含有储存桶名)
- 删除通过cloudflare响应头中包含的原域名的信息(backblaze响应头中含有文件id等信息)
1. 配置 Backblaze
1.1 注册 backblaze B2
登录 'https://www.backblaze.com/get-started'
输入邮箱地址和密码
之后就可以用注册邮箱和密码登录了'https://secure.backblaze.com/user_signin.htm'
登录后验证邮箱地址,否则无法创建外部访问的桶。
输入 https://secure.backblaze.com/account_settings.htm?verifyEmail=true
发送邮件后,点击链接验证即可,不需要输入验证码
1.2 创建一个储存桶(storage bucket)
储存桶就相当于一个硬盘,用来存储上传的文件。
输入名字,将访问改为公众。这里的名字就是访问的一部分路径
1.3 修改桶的CORS参数
修改选项与所有HTTPS来源共享此存储桶中的所有内容。
1.4 修改桶的缓存时间
在桶设定里面-桶信息里面键入
{"cache-control":"max-age=2600000"}
将缓存时间设置为30天,共2600000
秒。
这里可以设置为500天(432000000秒),作为图床图片要么是新增要么是删除,同一名字不同内容的文件几乎没有,缓存可以设置时间长一些。
2. 配置 CloudFlare
2.1 自定义域名代替backblaze原域名
击上传的文件,然后就可以看到文件的URL链接了,这个链接就可以分享出去了。
点击上传的这个文件,查看属性值,将Friendly URL里面的地址。
https://f005.backblazeb2.com/file/imgggg/a1d8f60546a444ebb9395df0ae26eb65.md
其中f005.backblazeb2.com
就是backblaze的源域名,将自定义域名替换掉,变成img.dreamwork.top/file/imgggg/a1d8f60546a444ebb9395df0ae26eb65.md
登录cloudflare,点击添加站点(域名必须用cloudflare解析,要在域名商哪里修改),将自定义域名通过CNAME指向f005.backblazeb2.com
,代理模式必须打开。
点击SSL/TLS,将加密模式从“flexible”更改为“full”,
现在就可以通过自己的域名访问刚才上传的,https://img.dreamwork.top/file/imgggg/a1d8f60546a444ebb9395df0ae26eb65.md
2.2 添加页面缓存
为了减少对backblaze的访问频率和访问失败的情况下进行跳转,需要再cloudflare里面添加页面规则进行页面缓存和跳转。
- 点击域名左侧概述,在整个页面的右边栏的中下位置有个页面规则,点击。
- 创建页面规则
- 填入要缓存的路径(即访问路径),选取设置为
缓存级别
-缓存所有内容
img.dreamwork.top/file/imgggg/*
注意路径后面要跟着星号 - 保存页面规则
2.3 隐藏文件的真实路径
由于只是将域名进行了重定向,文件路径还是会暴露出来,有心人还是会顺着路径进行暴力刷流量,这里就需要隐藏路径来避免。
将访问地址https://img.dreamwork.top/file/imgggg/a1d8f60546a444ebb9395df0ae26eb65.md
变成 https://img.dreamwork.top/a1d8f60546a444ebb9395df0ae26eb65.md
注意:该方法会增加访问的时间
在左侧任务栏选中转换规则。
在重写URL下面点击创建规则。
- 输入规则名,名称随意
- 点选自定义筛选表达式,在下方输入
- 主机名 =
img.dreamwork.top
并且同时 url完整不能为https://img.dreamwork.top
并且 url路径开头不能为/file/imgggg
- url路径开头不能为
/file/imgggg
优化规则 这样在输入完整路径名时也可以访问文件,而不会出现/file/imgggg/file/imgggg
的情况。
# 填入的是文件名和域名之间的路径地址, 域名为自定义的域名
(http.host eq "img.dreamwork.top" and http.request.full_uri ne "https://img.dreamwork.top" and not starts_with(http.request.uri.path, "/file/imgggg"))
再在路径下面选择重写到,选择动态,然后输入
concat("/file/imgggg", http.request.uri.path)
- 点击部署,等规则生效。之后就可以通过
域名+文件名
的方式进行引用(https://img.dreamwork.top/a1d8f60546a444ebb9395df0ae26eb65.md
)。
2.4 删除响应头所暴露的信息
访问文件时,backblaze响应数据包,数据包响应头会带有文件的一系列信息,这部分信息会泄漏文件的来源等信息。通过cloudflare代理时,是由cloudflare转发,需要设置规则将这部分信息在转发时删除。
在左侧任务栏选中转换规则。
在修改响应头下面,创建规则。
- 输入规则名,名称随意
- 点选匹配规则为
所有传入请求
- 将下面几个带有
X-Bz
的响应头填入规则内,选择删除这几个标头。
X-Bz-Content-Sha1
X-Bz-File-Id
X-Bz-File-Name
X-Bz-Info-Src_last_modified_millis
X-Bz-Upload-Timestamp
4.点击部署,等规则生效。之后通过再访问文件响应头里面就没有backblaze的标识信息了。
3. 配置picgo
3.1 申请Application Key
在Backblaze左侧任务栏点击Application Key
在右侧最下方点击Add a New Application Key
- 输入秘钥名
img-app-token
, - 选择已经存在的桶名
imgggg
, - 访问权限勾选 read and write
- 勾选 allow listing all bucket names
- 创建秘钥。点击Create New Key
记录keyID和秘钥applicationKey,只会显示一次,界面刷新就不存在了。忘记的话重新来一遍流程再创建一个新的Application Key即可。
3.2 安装picgo s3插件
本机上确保已经安装node.js,没安装的话点击https://nodejs.org/en
网址进行下载安装。
下载picgo进行安装。https://github.com/Molunerfinn/PicGo/releases
下载picgo插件s3,https://github.com/wayjam/picgo-plugin-s3/releases
这里可能会遇到插件装不上的情况,要么是点安装过了一会没反应,要么是加载错误
一般这种情况都是NPM模块安装有问题
解决方法:
- 切换到app的picgo目录
一般C:\Users\XXX\AppData\Roaming\picgo目录;XXX表示你的用户名
# 切换目录
cd C:\Users\administrater\AppData\Roaming\picgo
- 设置NPM源为国内源
# 在命令行输入
npm config set registry https://registry.npm.taobao.org
# 验证命令,返回 https://registry.npm.taobao.org,说明镜像配置成功。
npm config get registry
- 切换到app的picgo目录并安装模块
# 安装s3模块,一般picgo模块格式为 picgo-plugin-xxx
npm install picgo-plugin-s3
- 重启picgo即可。
3.3 配置picgo s3
picgo面板左侧选amazon s3 ,右侧点击编辑配置。
命名配置名,将backblaze的keyid,秘钥,和桶名填入。
由于自定义的引用地址为https://www.xx.com/picname.jpg
,所以在文件路径这里填入{fullName}
。
- 自定义节点在backblaze-桶的最下方有个
endpoint
将地址填入自定义节点。 - 自定义域名:最后会生成的图片域名,和图片上传位置没有直接关系,填入自己购买的域名。
- ForcePathStyle:no关闭,否则会在最终路径里面显示有桶名。
- 拒绝无效TLS证书连接 :yes开启,如果出现证书错误可以关闭
- ACL访问控制列表:public-read
- Bucket前缀:false
确定就配置成功。
最后在PicGo设置中,开启时间戳重命名,这样能够确保上传的每一张图片名字都是唯一的。
在上传界面选amazon s3的上传配置,即可使用backblaze图床。
4. 数据备份
为了防止一些不可预料的事故发生,比如服务器被删除,产品到期,欠费导致数据无法使用或者丢失,最好做好备份以方便重新搭配
4.1 手动备份
在backblaze里面选择要备份的桶,点击Make Full Bucket Snapshot创建一个快照
在Snapshots中就可以看到已创建的快照,等待快照准备完成就可以下载了
4.2 自动备份
自动备份就是通过keyid和秘钥来定时下载内容,找一个同步软件,比如群辉或者goodsync等,按照webdav的方式同步即可。
要注意自动同步会消耗流量。