Cloudflare Workers 初体验
之前一直都关注 Cloudflare Workers 推出的 serverless 服务。但是一直没有动手去尝试一下。今天访问 Github 一直无法连上。突然想到了 Cloudflare 的 这个服务,看能不能解决当前的痛点。果然需求是学习的最大动力。
首先登录到 Cloudflare 的 dashboard https://dash.cloudflare.com/找到右侧的 Workers 服务。然后创建一个新的 Worker 应用。然后就是发挥你的才智创造啦!
通过阅读官方文档应该很快就能掌握 Workers 的使用。只要 js 过关的话应该很快就能掌握。我直接翻到 Runtime APIs 部分。大致了解了下官方提供的相关 API。可以说官方的文档还是挺不错的,基本上都有相应的 Demo 可以参照。
那么解决不能访问 Github 的问题的大致思路就是:
添加一个事件监听本地客户端发送的请求
封装一个对请求的处理,先去 fetch Github 源站点获取内容然后返回给本地客户端结果
添加一个事件监听的核心代码:
addEventListener('fetch', event => {
event.respondWith(reqHandler(event.request));
})
请求处理的核心代码:
const domain_list = ['https://your-workers-name.geehon.workers.dev']
const upstream = 'https://www.github.com/'
async function reqHandler(request) {
let url = request.url;
const method = request.method;
const headers = request.headers;
for(let domain of domain_list) {
url = url.replace(domain, upstream)
};
const response = fetch(url, {
method: method,
headers: headers
})
return response;
}
完整代码
// List of domains bind to your WorkersProxy.
const domain_list = ['https://your-workers-name.geehon.workers.dev']
// Website you intended to retrieve for users.
const upstream = 'https://www.github.com/'
addEventListener('fetch', event => {
event.respondWith(reqHandler(event.request));
})
async function reqHandler(request) {
const method = request.method;
const headers = request.headers;
let url = request.url;
for(let domain of domain_list) {
url = url.replace(domain, upstream)
};
const response = fetch(url, {
method: method,
headers: headers
})
return response;
}
想要添加 IP 过滤,客户端识别或者其他的请求处理直接添加到 reqHandler
函数里即可。
声明:本文只介绍一种解决问题的思路,切勿用于非法用途。请勿滥用厂商的资源!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!