抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

封面来源:桜のぞみぞ | はしば #pixiv https://www.pixiv.net/artworks/77839764

在经历了博客流浪纪事中四迁博客的奇妙历险之后,老东家狗云的表现却出乎故事结局走向和所有人意料的,掉了链子。国庆前夕,也不知是否因为不可知的力量作祟,在下的博客又喜提 200+ms 的延迟,长达三四天也没有恢复,于是,在下就又动了迁站的念头。

给在下开狗云机子的兄弟听说了在下的情况,竟直接全款赞助了在下一台 TOTYUN HKG-CN2-2C2G 的小鸡。说实话,在下实在有些受宠若惊,这台机子的完美程度远超预期,若是硬要挑毛病出来,只能是它那 10M 的带宽拖了后腿。经过迁站后的体感测试,发现敝站在加载多图页面时确实有些力不从心。这也难怪,自从 jsDelivr 在大陆访问不畅,敝站的静态资源就几乎全搬到了源站。之前在下使用的服务器,带宽最少也有 30M,同时加载多图的压力自然不大,而如今在服务器只有 10M 带宽的情况下,就显得捉襟见肘了。好在对于这个问题,在下也早已有了心理准备。在下在最初存放静态资源时,就特意为其分配了专用的三级域名,并将其与主站内容分开,为日后可能需要的迁移尽可能做好了准备。

对于静态资源的存放点,在下选择了甲骨文,每个甲骨文账户都拥有免费的 10G 对象存储和 10G 归档存储,并且它们产生的流量都是算在每月 10T 的免费流量里的,也就是说,以敝站的体量,将静态资源放在甲骨文存储桶与白嫖并无相异。唯一的问题在于甲骨文存储桶在大陆的访问体验不行,经过一番搜索,在下发现能够使用 Cloudflare Workers 为甲骨文存储桶提供加速,折腾之旅就此再度开始。

创建甲骨文存储桶

这一步比较简单,登录 Oracle Cloud 之后找到入门选项卡,点选启动资源中的存储数据,自拟存储桶名称,点击创建即可。

创建完成之后转到存储桶详细信息,找到常规下的名称空间,将其记下;在看到浏览器地址栏末尾,记下 Oracle 的地域标识,比如在下的是 ap-chuncheon-1

点击编辑可见性,将可见性设为公共

至此,存储桶建立完成,Oracle 存储桶支持通过 Amazon S3 的协议进行管理,迁移资源非常方便,但鉴于相关教程泛滥,具体步骤在这里就不加赘述了。

配置 reflare

Xiaoyang Liu 大佬开发的 reflare 项目是实现使用 Cloudflare Workers 加速甲骨文存储桶的理想方案,根据其官方文档的描述可对该项目初知一二:

Reflare is a lightweight and scalable reverse proxy and load balancing library built for Cloudflare Workers. It sits in front of web servers (e.g. web application, storage platform, or RESTful API), forwards HTTP requests or WebSocket traffics from clients to upstream servers, and transforms responses with several optimizations to improve page loading time.

配置 reflare 需要用到 Wrangler-CLI,它是 Cloudflare Workers 的命令行工具,提供了一个简略的接口,能够让你在本地开发环境中使用 Cloudflare Workers。Wrangler-CLI 需要 Node.js 环境才能运行。

使用环境准备就绪后,打开系统命令行工具。

安装 Wrangler-CLI:

1
npm install -g wrangler

上面安装的过程中如果出现权限问题,需要使用管理员权限执行。

可以执行 wrangler --version 来确认 Wrangler-CLI 是否被成功安装,若安装成功,则会返回版本号。

接着,输入如下命令对 Wrangler 进行授权:

1
wrangler login

浏览器会弹出 Cloudflare 的授权界面,根据提示点击授权即可,若没有弹出界面,可以手动复制出现的链接到浏览器访问。

键入如下命令创建一个 reflare 项目:

1
2
3
wrangler generate reflare-app https://github.com/xiaoyang-sde/reflare-template
cd reflare-app
npm install

注意:在 Windows 系统中,上述命令可能执行失败,无法拉取对应仓库的文件,这时只能手动放入,输入不带仓库地址的创建项目命令:

1
wrangler generate reflare-app

创建成功后会提示项目文件夹路径,删除这个文件夹中的所有内容,然后将 reflare-template 里的所有文件下载下来,全部复制到这个文件夹当中,之后再执行 cd reflare-appnpm install 命令。

项目创建完成后,在项目文件夹路径下找到 index.ts,打开它并做如下编辑,结合实际情况替换 名称空间地域标识cors 下的 https://example.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import useReflare from 'reflare';

const handleRequest = async (
request: Request,
): Promise<Response> => {
const reflare = await useReflare();

reflare.push({
path: '/*',
upstream: {
domain: '名称空间.compat.objectstorage.地域标识.oraclecloud.com',
protocol: 'https',
},

cors: {
origin: ['https://example.com'],
methods: ['GET', 'POST'],
credentials: true,
},
});

return reflare.handle(request);
};

addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request));
});

创建 Cloudflare Workers

这一步需要拥有一个 Cloudflare 账号,若不曾拥有,须注册之。另外,还需准备一个域名,由于 Cloudflare Workers 自动分配的域名处于被墙的状态,因此若不绑定自有域名,存储桶里的资源将无法在中国大陆地区成功加载。

找到侧边栏的 Workers,点击创建服务。服务名称填自拟,启动器就选择默认的 HTTP 处理程序

接下来要将准备好的域名转移到 Cloudflare 解析,选择侧边栏中的网站,点击添加站点,添加上准备好的域名,按照页面出现的提示前往域名的注册商处更改 NS 记录,NS 记录的更改需要一定时间,在 NS 记录同步完成之前,可以先进行下面不涉及域名操作的步骤。

当 Cloudflare 提醒站点添加成功,进入网站,选择准备好的域名,看到页面右侧下方,找到 API,记录下账户 ID

选择侧边栏中的 DNS,添加一个 A 记录,自拟一个三级域名给 reflare,IPv4 地址可以随便填,例如 8.8.8.8,记得开启代理的橙色云朵。

回到刚刚创建的 Workers,点击触发器,找到路由,选择添加路由,填写刚刚添加的三级域名 YOUR_DOMAIN/* ,如 api.champhoon.xyz/* ,下面的区域就选择对应的二级域名,设置完成别忘记保存。

部署并使用

来到之前在本地创建的 reflare 项目文件夹路径,对 wrangler.toml 做如下编辑:

1
2
3
name = "" #与之前创建的 Cloudflare Workers 的名称保持一致
main = "src/index.ts"
compatibility_date = "2023-04-09" #无需更改,与最新版本保持一致即可

编辑完成后保存,所有配置就此宣告终结。

在项目路径打开命令行工具,输入 npm run dev 以测试 reflare 是否成功运作。假如配置没有出问题,程序会返回几个本地地址以供测试,使用浏览器访问其中一个地址,命令行会输出绿色的访问成功提示;进一步访问存储桶里具体的文件,如 127.0.0.1:8787/存储桶名称/path/to/文件.xxx ,如能加载出对应的文件且命令行无其他报错则表示一切正常,大功告成。

最后,按 Ctrl + C 退出测试环境,运行 npm run publish 将项目部署到 Cloudflare Workers。

部署完成后,只需使用 https://YOUR_DOMAIN/存储桶名称/path/to/文件.xxx 访问存储桶里的文件,即可实现 Cloudflare Workers 对甲骨文存储桶的加速。

评论