搜索帖子或用户

分享一个 Cloudflare for SaaS 多租户接入系统:客户域名不用托管 CF,加条 CNAME 就能接入 Worker

浏览 31回复 2
内容目录 · 5

最近在折腾一个多租户接入的场景,分享一个开源项目:cf-saas-tenant-router,思路是拿 Cloudflare for SaaS 做多租户的统一入口,客户域名不用托管进 Cloudflare 就能接进来。

它是怎么工作的

客户的域名 NS 完全不用动,继续留在客户自己的 DNS 那里。客户只需要在自己的 DNS 里加一条 CNAME,指向 opt.<宿主域名>,流量就进了 Cloudflare 的边缘节点。Cloudflare for SaaS 的 Custom Hostname 会自动给客户域名签发证书,Worker 再按请求里的 Host 去 D1 的租户表查这个域名属于哪个租户,然后把请求分流转发到各自的上游,比如 tgproxy、cf-erp、cf-subcloud 这类服务。转发的时候还支持 Origin 改写、页面里域名的替换,WebSocket 也能直接透传过去。

也就是说,租户侧的接入成本就是一条 CNAME,剩下的证书、路由、转发都由这一套系统来处理。

管理面板有四个标签页

  • 租户:租户的增删改查、启用和停用都在这里。
  • 接入码:生成 8 位接入码发给客户,客户在宿主域名下的 /join 页面自助接入,码是一次性的,还能防重放。
  • 自定义主机名:创建和删除 Custom Hostname,详情弹窗里会把客户需要加的全部 DNS 指令都列出来,照着抄就行。
  • 优选:多路优选入口的管理和在线测速。

新客户接入大概 3 分钟

流程是这样的:先在面板生成接入码发给客户,客户打开宿主域名的 /join,输入接入码和自己的域名,按提示加 CNAME,再补一条验证用的 TXT,或者做 DCV 委派 CNAME,等证书和主机名都变成绿灯就能用了。如果证书一直卡在待验证,多半是客户域名、或者它上级域名的 CAA 记录没有授权对应的 CA,先查 CAA。

部署是模板化的

任何一个新的 Cloudflare 账号从零开始部署,代码不用改一行:本机一条 npm run init 命令就能装好,或者走 GitHub Actions 全自动部署,push 之后自动上线,建 D1、写密钥、建 DNS、设置 Fallback Origin 这些步骤都是自动的。一个仓库还能用 GitHub Environments 同时管多个 Cloudflare 账号,每个账号对应一个 Environment。

新账号先人工做好三件套

  • 宿主域名的 NS 先托管进 Cloudflare;
  • 在控制台启用 Cloudflare for SaaS,这个步骤要绑卡;
  • Fallback Origin 要在控制台手填,API 不接受 Token 认证,自动化走不通。

另外两点经验:优选 IP 建议每周跑一次维护;全部配置都在 wrangler.jsonc 的 vars 段,代码里没有任何硬编码。密钥要走 wrangler secret,不要在 Dashboard 里建明文变量,否则下次部署会被清掉。

项目地址:https://github.com/lzmss-love/cf-saas-tenant-router

#cloudflare #worker #saas

更多
回复

回复

2
最早回复在前

SaaS确实好用,我现在使用的TG-WebProxy也是用SaaS的方法优选IP,很方便

0 条楼内回复

先fork一个,空了试试

0 条楼内回复

举报

搜索社区

板块范围

搜索历史

历史仅保存在当前浏览器,可随时清空。