---
layout: post
title: 使用CloudFlare Workers做一些有趣的功能
tags: [CloudFlare, Workers]
---

  挺不错，但是还是不如PHP<!--more-->    
  
# 起因
  之前搞[微信图片机器人](/2021/02/23/picbotpro.html)的时候，我看到P站的图片反代给了一个自己在CloudFlare Workers上建反向代理的[代码](https://pixiv.cat/reverseproxy.html)。   
  虽然我很早就在用CloudFlare，也知道Workers这个功能，不过我的JavaScript水平不太行，而且当时这个功能还不够完善，就没怎么管，不过既然又见到了，那就来玩玩试试看吧，现在的这个Workers功能不仅已经很完善，而且免费版的限制也少了很多，甚至还支持1G的KV存储。   
  
# 首先给自己搭个反代
  之前我用PHP给自己的博客搭了一个[简单的反代](/2021/01/06/proxy.html)，不过我用的那个服务商不太行，速度有点慢，而且也不是所有的PHP空间都支持伪静态。那既然有CloudFlare Workers那我们就来试试用这个实现吧。   
  代码如下：
```javascript
addEventListener("fetch", event => {
  let url = new URL(event.request.url);
  url.hostname = "mabbs.github.io";
  event.respondWith(fetch(new Request(url, event.request)));
});
```
  看起来代码好像更简单了，可惜我的JavaScript水平不行，最多只能照猫画虎，自己写不来……   
  最终做出来的网址如下： <https://blog.mayx.workers.dev/> ，这也算是我博客的另一个为了在国内能访问的域名吧……如果自己有域名的话可以设置路由把其他域名绑在上面。   
  不过CloudFlare Workers也有一些缺陷，那就是有请求次数限制，免费版只有10w次/天的访问次数限制，对于我这种小站还行，大一点的请求次数一阵子就用光了，相比于限流量的PHP空间，用CloudFlare Workers做这种请求比较密集的站并不合适，不过这个不限流量，如果用来代理下载比较大的文件还是挺不错的。   

# 给自己的网站搭一个Status Page吧
  我在看Workers的一些介绍时看到了一个很有意思的东西，就是Status Page，用来监测网站可用性的，看起来很有意思而且部署非常简单，具体可以看[文档](https://github.com/eidam/cf-workers-status-page#getting-started)。   
  这个东西支持一键部署，只要按照说明，很轻松就能搭一个属于自己的Status Page，另外我也给花火学园搭了一个[Hanabi Status Page](https://status.sayhuahuo.com/)，看起来很专业的样子。   
  
# 其他玩法
  其实这就是所谓的Serverless的云函数吧，我以前玩LeanCloud的时候就玩过了，本质其实和那些虚拟网站空间差不多，只是可能和平台的集成度更高，有一堆自制的API，所以效率更高吧。像OneIndex当时也有CloudFlare Workers版的，就是功能有点少，所以我还是搭的PHP版。   
  如果自己有能力开发的话利用那个KV存储其实想开发什么网站都可以，而且这个支持的语言也很多，甚至也支持PHP，就是和一般的PHP感觉不太一样……    
  比如我之前开发的[图片机器人](/2021/02/23/picbotpro.html)、[Server酱自制版](/2021/02/26/serverchancorp.html)等等都可以用CloudFlare Workers重写。   
  像这样甚至自己写一个论坛都没问题，不过免费版的限制还是挺多的，虽然1G的KV存储还是挺大的，但是10w次/天的访问还是太少了，要用的话还是不够……如果做成前后端分离的那种可能还好，一个页面就一次请求，要是没有分离的话访问一次就要请求好多次了，相比之下不考虑流量的话可能免费的虚拟网站空间还能支持更多的请求。   
  
# 总结
  总之现在Serverless也算是一个现在比较流行的东西（有人说Workers是边缘计算，不过我感觉现在应该不算了），从云计算来看应该算PaaS吧？还是BaaS（后端即服务，不是什么区块链）？倒是可以玩玩试试看，不过也就小公司可能会因为相对便宜而用，大公司肯定不会把业务放到这种东西上，万一这个服务没了，那曾经写的代码可能就全都没用了，如果做了兼容层还好，毕竟每一个平台的API都不一样，现在的Serverless厂家又不可能统一成什么联盟，挂了就没了，但是在服务器上自己写和部署的代码，无论是哪个服务器都可以运行，所以这个也就只能是玩玩看，未来这个可能不会有很大的发展。
