Tominysun

2023-04-19更新

目前我在node项目里加入了一个反向代理,已经可以做到完整云端部署了(设置好config后,一键部署到vercel,没有任何非官方外部接口引入)。
相关项目也已经放到github上了,虽然代码比较简陋,但功能上也算是基本完善了。

前言

最近我的一台小服务器挂了一段时间,但由于我的在线状态页是经过了一定程度的自定义改造,需要依赖于服务端和反向代理。因此服务器挂了以后,连在线状态页也无法访问了。

这个暴露出很大的问题,All in one, all in boom!

因此我觉得对原有的状态页进行改造是非常有必要的。

Old Version

我的在线状态页是由UptimeRobot提供的,最早的时候,它的Uptime Status Page是提供自定义域名绑定的,那时不需要任何操作,直接cname绑定即可。

后来,可能是为了降本增效吧,UptimeRobot取消了Status Page的自定义域名绑定功能。

从此,八仙过海,各显神通。有使用其他程序自己实现在线状态页的,也有利用Github Action的,还有使用UptimeRobot提供的api自行获取。而我的实现方式则是在原有提供的在线状态页面基础上,通过反向代理和伪静态恢复原有的状态页。

我将老版本的实现方式放到Github仓库的old分支中备份。

New Version

由于我自己的服务器在线率肯定没有公共服务好,因此经过一番挑选,我选择Vercel来实现在线状态页。
由于Vercel支持node.js的动态网站,于是我稍稍学习了一下node.js,然后踩了些坑,终于完成了基本网页脱离服务器的版本。(目前API接口依然需要反向代理,后续再更新,可能会使用Cloudflare Workers或者集成在Vercel里一起实现?)

同样,我也把这部分代码放到了Github仓库的main分支里。

学习

在学习使用Node.js建立反向代理的时候,我遇到了一些小问题,经查,相关文字给出了一些资料,但这些资料在时效性上有很大的问题。
例如一篇segmentfault上的教程(详见链接12),文中引用http-proxy-middleware的方法有误(const proxy = require('http-proxy-middleware');),在新版本中无法正常运行。在我查阅github上的官方文档(详见链接9)后,改用正确的引用方法(const { createProxyMiddleware } = require('http-proxy-middleware');),程序得以正常运行。

展望

截止目前,已经完成了全部的改造。我在node.js项目里加入了一个简易的反向代理,目前算是完全脱离我的自建服务,已经全部上云了。

未来或许会支持更多官方提供的静态模板?可能哪天闲来无事会再更新一下?毕竟目前这个小项目也已经算是基本完善了。(能用就行...)

据我观察,目前的其他同类项目,大部分都使用了自己(或公共)的反代接口,也有部分项目直接使用api.uptimetrobot.com。但访问可达性不够好。

因此,如果以后有空的话,可能会继续完善本项目。

  1. 使用Cloudflare Workers
  2. 集成在同一个Vercel Project实现

链接

  1. Service Status
  2. tominysun/uptime-status: A custom status page for uptimerobot

外部链接

  1. node渲染html模板的两种方法 - JunCode - 博客园
  2. 在 Express 中提供静态文件
  3. 使用 NodeJS 实现反向代理 - 腾讯云开发者社区-腾讯云
  4. Express 教程 4:路由和控制器 - 学习 Web 开发 | MDN
  5. Configuring Projects with vercel.json | Vercel Docs
  6. How to Use a Cloudflare Domain with Vercel
  7. 使用Cloudflare加速vercel | 瓦解的生活记事
  8. JS 将JSON数组转化为url参数_json转url参数_InterestAndFun的博客-CSDN博客
  9. chimurai/http-proxy-middleware: The one-liner node.js http-proxy middleware for connect, express, next.js and more
  10. Express 4.x - API Reference
  11. Express 4.x - API Reference
  12. node.js - 使用 express 轻松实现反向代理服务器 - hiyangguo - SegmentFault 思否

同类项目

  1. Qikaile/uptime-status: 基于 UptimeRobot api 时时监控主机、网站、端口等在线状态;
  2. imsyy/status: 一个基于 UptimeRobot API 的在线状态面板,修改自 https://github.com/yb/uptime-status
  3. giuem/uptimerobot-page: Another status page based on UptimeRobot

添加新评论