众所周知的是互联网山有一个超级知名的大善人,此人被世人尊称为赛博佛祖,你只需要自己拥有一个域名就能在上面解锁很多强大的功能,包括但不限于防火墙,workers,域名解析,邮件服务等。

本文主要尝试讲解一下cloudflare的workers服务,你可以将它看作一个可编程的代理服务器,类似nginx的lua脚本,不同的是它要强大的多,因为它不只是代理,还可以集成cloudflare的其他服务,比如数据库等,它介于客户端和后端之间,所以可以操作客户端请求,后端响应,因此可以实现非常多的有趣的功能,具体的案例可以参考官方文档: https://developers.cloudflare.com/workers/examples/,官方示例代码分类如下

examples.png

本文是一个系列文章,系列文章内容安排如下:

  1. 增删改查客户端请求
  2. 增删改查后端响应
  3. 认证/重定向/缓存
  4. 静态文件
  5. 其他编程语言支持(如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': '*' // 允许跨域访问
    }
  });
}

效果如下: ifconfig-example

Playground

如果你想不创建workers就测试workers代码,可以登陆cloudflare的 workers playground来测试代码,地址:https://workers.cloudflare.com/playground

总结

cloudflare的workers可以做的事情超级多,唯一受限的是自己的想象力,如果跟cloudflare的数据等其他服务绑定的话完全可以整个后端代码放在上面,如果业务比较轻的话,如果业务比较重,肯定还是得自己搞后端服务器,并且配置各种服务,而cloudflare的好处是免费额度足够大。

唯一的缺点可能是,cloudflare在中国的延迟问题,但这个问题见仁见智吧,可以忍受的自然可以忍受。