使用 Cloudflare 服务优化图床
本文最后更新于 2023年8月26日 下午
图床优化
使用backblaze-B2搭建自己的图床[1]获取图片地址后,发现图片的链接难以记忆,并且不是自己的域名。
虽然可以通过域名的DNS
服务并设置CNAME
绑定二级域名到f000.backblazeb2.com
,这样就可以通过自定义域名访问图片地址。比如img.maojun.xyz/file/test/bar.png
。但是又有一个问题,/file/test
这个也是固定的,如果直接显示为img.maojun.xyz/bar.png
,这样就显得清爽多了。所以首先对图片的返回地址做下优化,可以将图床地址绑定成自己的域名。比如图片地址器地址是img.maojunxyz。 同时将默认图片地址后的路径/file/bucketName/foo.png
优化缩短为foo.png
,这样和图片前缀地址拼接上就是: img.maojun.xyz/foo.png。
自定义图片地址
这里将使用Cloudflare
作为DNS
的服务商。因为Cloudflare
提供了一系列对站长友好的工具,并且可以免费使用。比如CDN
,Worker
,网站信息统计等功能。当然这一步不是必须的,你可以维持你的DNS
服务提供商,这不会对后续的操作有影响。只需根据下面的步骤作为参考并在DNS
服务商处做相应的修改即可。
下面以Cloudflare
做为演示: 如果没有Cloudflare
账号先注册并登入,Cloudflare
的官网地址是Cloudflare[2]。
使用Cloudflare
的DNS
解析服务,首先添加域名,点击按钮Add a Site,然后根据提示。将DNS
地址修改成Cloudflare
提供的地址即可完成绑定解析。
绑定后然后点击自己的域名进入到控制台,点击菜单图标DNS,进入DNS
控制面板。
点击record按钮,在输入框中输入并绑定自己的图片域名到b2
服务地址。 填写完成后,点击SAVE按钮保存设置。
等待片刻就可以通过自定义图片域名+后缀访问图片地址了。 前后对比:
1 |
|
配置页面规则
在上面的链接中,访问https://img.maojun.xyz/file/bucketName/foo.png
,当bucketName
正确匹配我们自己创建的buckets
时,可以正常访问到图片链接。 当bucketName
是其他名称或者不是我们创建的buckets
名称时,我们让其跳转到错误页面。
1 |
|
可以通过Cloudflare
的Page ruler进行配置。点击域名下的控制面板,点击菜单Page ruler进入服务。 点击Create Page Ruler按钮,配置如下信息:
URL | Description |
---|---|
https://img.maojun.xyz/file/imgxyz/* | Cache Level: Standard |
https://img.maojun.xyz/file/*/* | Forwarding URL (Status Code: 302 - Temporary Redirect, Url: https://maojun.xyz/404notfound) |
上面的配置信息规则为:
- 当访问
https://img.maojun.xyz/file/imgxyz/*
时,使用标准缓存。 - 当访问
https://img.maojun.xyz/file/*/*
(即除了上面的规则外的地址如:https://img.maojun.xyz/file/abc/*) 就302掉转到指定的404页面。)
注意上面的规则顺序不能错,如果第二条规则在上面则会拦截所有地址包括
https://img.maojun.xyz/file/imgxyz/*
。
这样当访问的请求不是来自配置的页面放行规则时就会被302
跳转到指定的页面。
简化图片链接
通过自定义域名绑定后,链接地址比之前要更加直观。但是后面的长路径依然存在,我们可以想办法把它去除,让最终的链接格式如下:
1 |
|
我们可以使用Cloudflare
提供的Workers
服务来重写图片的URL
地址,让链接地址更加友好和简洁。Workers
是一个边缘计算服务,允许你在Cloudflare
全球网络中的边界服务器运行JavaScript
代码。开发者可以部署serverless
(轻服务) 的应用程序。
免费版:
- 每天10万次请求
- 30个
Workers
脚本 - 运行在200个数据中心
- 免费的workers.dev二级域名
- 每次请求最大占用
CPU
运行时间为10ms - 首次请求后最低延迟
在Cloudflare
的主界面,在右侧位置点击进入Workers服务。 点击Craate a Workers按钮创建一个新的Workers
脚本。
在Scripe代码框中清除原先代码并粘贴以下内容:
1 |
|
注意代码的第2-3
行:
1 |
|
- b2Domain:修改成自己图床的域名。
- b2Bucket,修改成自己的
bucket
名字。
修改后点击按钮Save and Depoly保存。
保存后还不能直接使用,我们需要配置下规则。
进入域名下的控制面板。点击菜单Workers进入面板,然后点击Add route按钮。
添加路由为之前配置的图片服务器地址,后面使用*
匹配该域名下的所有所有内容。 并在Worker处选择刚才创建的Workers名称。
配置好少,稍等片刻生效。即可以通过最终的图片地址访问了:
1 |
|
注意:配置
Workers
后上面配置的Page ruler
规则会失效。配置了Workers
规则会先走。
配置防盗链
可以配置Referer
来判断是否是自己的来自自己域名,如果不是则都拦截。 由于Referer
是可以修改的,所以这只能简单的进行拦截。
进入域名下的面板,点击菜单Firewall进入服务。点击**+ Create firewall rule**进入防火墙规则服务。
填写规则名称和规则匹配条件:
Field | Operator | Value |
---|---|---|
Referer | does not contains | maojun.xyz |
URI Full | contains | img.maojun.xyz |
(not http.referer contains “maojun.xyz” and http.request.full_uri contains “img.maojun.xyz”)
上面的规则是: 如果URI
全路径中包含了img.maojun.xyz
内容,同时Referer
不包含maojun.xyz
则拦截。 由于这个图床我暂时只有一个域名即maojun.xyz
在用,如果你有多个域名使用同一图床,可以在上面的规则中填加多个域名放行。
配置完以上后,就可以通过优化后的图片地址https://img.maojun.xyz/test.png
访问了。
(本文完)