众所周知的是互联网山有一个超级知名的大善人,此人被世人尊称为赛博佛祖,你只需要自己拥有一个域名就能在上面解锁很多强大的功能,包括但不限于防火墙,workers,域名解析,邮件服务等。
本文主要尝试讲解一下cloudflare的workers服务,你可以将它看作一个可编程的代理服务器,类似nginx的lua脚本,不同的是它要强大的多,因为它不只是代理,还可以集成cloudflare的其他服务,比如数据库等,它介于客户端和后端之间,所以可以操作客户端请求,后端响应,因此可以实现非常多的有趣的功能,具体的案例可以参考官方文档: https://developers.cloudflare.com/workers/examples/,官方示例代码分类如下
本文是一个系列文章,系列文章内容安排如下:
增删改查客户端请求
增删改查后端响应
认证/重定向/缓存
静态文件
其他编程语言支持(如Python和Rust)
快速入门的例子
下面的代码会将客户端所有的信息以json的格式返回给客户端
// 获取客户端请求信息
// https://ifconfig.youerning.top/
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// 获取客户端IP(优先使用CF专用头)
const ip = request.headers.get('CF-Connecting-IP') ||
request.headers.get('X-Forwarded-For') ||
'IP not available';
// 获取请求头信息
const headers = {};
for (const [key, value] of request.headers) {
headers[key] = value;
}
// 获取Cloudflare提供的扩展信息[1,5](@ref)
const cfInfo = request.cf ? { ...request.cf } : {};
// 可选:添加地理位置信息[3,5](@ref)
if (!cfInfo.country) {
cfInfo.country = request.headers.get('CF-IPCountry');
cfInfo.city = request.headers.get('CF-IPCity');
}
// 构建响应对象
const responseData = {
ip: ip,
headers: headers,
cf: cfInfo,
timestamp: new Date().toISOString(),
method: request.method,
url: request.url
};
// 返回JSON响应
return new Response(JSON.stringify(responseData, null, 2), {
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*' // 允许跨域访问
}
});
}
效果如下:
Playground
如果你想不创建workers就测试workers代码,可以登陆cloudflare的 workers playground来测试代码,地址:https://workers.cloudflare.com/playground
总结
cloudflare的workers可以做的事情超级多,唯一受限的是自己的想象力,如果跟cloudflare的数据等其他服务绑定的话完全可以整个后端代码放在上面,如果业务比较轻的话,如果业务比较重,肯定还是得自己搞后端服务器,并且配置各种服务,而cloudflare的好处是免费额度足够大。
唯一的缺点可能是,cloudflare在中国的延迟问题,但这个问题见仁见智吧,可以忍受的自然可以忍受。