- 支持试读
准备工作
本专题需要事先做的准备工作。专题完结之后,你可以通过 zliu.tech、liziqi.ggff.net、zlusi.me和reqwest.me 体验我们提供的域名分发服务。 Cloudflare 常用 API
本章我们讨论本专题需要的 Cloudflare API。- 支持试读
项目初始化及配置
本章将对我们的项目进行初始化,然后编写配置。 数据及模型定义
本章我们将对数据表和对应的数据模型进行定义。数据库操作模块
本章我们将简单实现一些数据库的操作。- 支持试读
注册 Cloudflare Turnstile 并将其集成到 AXUM 应用中
本章将讨论注册 Cloudflare Turnstile 并将其集成到 AXUM 应用中。 - 支持试读
开发前端 SPA
为了更直观的进行 API 开发,我们先来编写前端 SPA。
准备工作
- 89
- 2024-11-25 12:53:45
本专题我们将构建一个域名分发(即子域名)系统。目前,有很多提供免费域名的服务,如果你想掌握其中的原理,相信本专题能带给你一些启发。
我们将通过 Cloudflare 的免费服务,实现域名分发。
本项目将采用以下技术栈:
- 后端方面
- 使用 AXUM Web 框架和 Tokio 运行时
- 使用 PostgreSQL 数据库
- 使用 sqlx 进行数据库操作
- 使用 reqwest 进行 API 请求
- 使用 lettre 发送邮箱验证码
- 使用 Cloudflare Turnstile 进行人机验证
- 前端方面
- 使用 React 框架构建单页应用(SPA)
- 使用 Tailwind CSS 和 Shadcn UI 构建 UI
最后,我们还会将前端SPA直接嵌入到我们的二进制文件里。
本专题使用及个域名进行教学:
zliu.tech
(2025年11月到期)liziqi.ggff.net
(2026年11月到期)zlusi.me
(2025年11月到期)reqwest.me
(2025年11月到期)
专题结束之后,你可以访问这些域名进行体验。
总体结构
从以上思维导图很清晰看到,本项目的大纲。
- 准备工作(本章):介绍本专题的主要内容,以及一些需要事先做的准备工作。
- Cloudflare 常用 API:将介绍本专题需要的一些API
- 项目设置:将编写整个项目的设置部分
- 用户中心:将编写用户中心模块
- 后台管理:将编写后台管理部分
准备工作之:将域名托管到 Cloudflare
这是一些先决条件,开始之前,你必须将你要分发的域名托管到 Cloudflare(简称 CF,下同)。
- 注册并激活 CF 账号。CF注册非常简单,只需要验证邮件即可完成。
- 将域名的NS记录修改为CF的NS。每个 CF 账号甚至相同 CF 账号不同域名的NS记录都不一样。
- 等待几分钟即可生效
本专题所有 Clodeflare 截图使用的都是英语。CF 支持中文,你可以自行切换语言,并与本专题截图进行对照
关闭 WebSocket 和 gRPC 支持
为了避免用户使用我们提供的域名进行一些不正当行为,我们需要把 WebSocket 和 gPRC 支持关闭。
CF 默认开启了 WebSocket,请按以下步骤关闭:
选择域名 - Network(网络)- WebSockets,将其关闭,如下图所示:
CF 默认并未开启 gRPC,你可以在同一页面检查是否关闭。如下所示:
将 SSL 证书修改为“弹性”(Flexible)
为了兼容用户自己的证书,我们需要把 CF 中的证书等级修改为Flexible
(弹性),这样既能保证安全,有不限于CF签发的证书。
-
选择域名 - SSL/TLS - Overview
-
点击 Custom SSL/TLS 里面的 Select
-
选择 Flexible 并点击 Save 按钮
[可选]关闭“强制HTTPS”
如果你的域名分发允许用户使用 HTTP,可以关闭 Always Use HTTPS
(该选项默认关闭);否则,将其打开。
为了用户可以正常申请第三方证书,本专题将其关闭。
准备工作之:API ID 和 Token
选择域名,在 Overview 页面的右下角,有 API 信息,里面分别有 Zone ID 和 Account ID
在My Profile - API Tokens页面(左上角用户图标 - My Profile - API Tokens),创建或管理 API Token。我们点击 Create Token 按钮来创建一个 Token,如图:
然后点击 Edit zone DNS 右边的 Use template 按钮:
按如下选项进行创建:
创建好之后,将 Token 复制保存起来。
Token 只显示一次,请妥善保管
代码仓库
本专题代码位于AxumCourse/domain-distribution
。注意,只有购买了本专题的用户才能访问该仓库。