准备工作

本专题我们将构建一个域名分发(即子域名)系统。目前,有很多提供免费域名的服务,如果你想掌握其中的原理,相信本专题能带给你一些启发。

我们将通过 Cloudflare 的免费服务,实现域名分发。

本项目将采用以下技术栈:

  • 后端方面
    • 使用 AXUM Web 框架和 Tokio 运行时
    • 使用 PostgreSQL 数据库
    • 使用 sqlx 进行数据库操作
    • 使用 reqwest 进行 API 请求
    • 使用 lettre 发送邮箱验证码
    • 使用 Cloudflare Turnstile 进行人机验证
  • 前端方面
    • 使用 React 框架构建单页应用(SPA)
    • 使用 Tailwind CSS 和 Shadcn UI 构建 UI

最后,我们还会将前端SPA直接嵌入到我们的二进制文件里。

本专题使用及个域名进行教学:

专题结束之后,你可以访问这些域名进行体验。

总体结构

大纲

从以上思维导图很清晰看到,本项目的大纲。

  • 准备工作(本章):介绍本专题的主要内容,以及一些需要事先做的准备工作。
  • Cloudflare 常用 API:将介绍本专题需要的一些API
  • 项目设置:将编写整个项目的设置部分
  • 用户中心:将编写用户中心模块
  • 后台管理:将编写后台管理部分

准备工作之:将域名托管到 Cloudflare

这是一些先决条件,开始之前,你必须将你要分发的域名托管到 Cloudflare(简称 CF,下同)。

  • 注册并激活 CF 账号。CF注册非常简单,只需要验证邮件即可完成。
  • 将域名的NS记录修改为CF的NS。每个 CF 账号甚至相同 CF 账号不同域名的NS记录都不一样。
  • 等待几分钟即可生效

本专题所有 Clodeflare 截图使用的都是英语。CF 支持中文,你可以自行切换语言,并与本专题截图进行对照

关闭 WebSocket 和 gRPC 支持

为了避免用户使用我们提供的域名进行一些不正当行为,我们需要把 WebSocket 和 gPRC 支持关闭。

CF 默认开启了 WebSocket,请按以下步骤关闭:

选择域名 - Network(网络)- WebSockets,将其关闭,如下图所示:

关闭WS

CF 默认并未开启 gRPC,你可以在同一页面检查是否关闭。如下所示:

关闭gRPC

将 SSL 证书修改为“弹性”(Flexible)

为了兼容用户自己的证书,我们需要把 CF 中的证书等级修改为Flexible(弹性),这样既能保证安全,有不限于CF签发的证书。

  • 选择域名 - SSL/TLS - Overview

    ssl1

  • 点击 Custom SSL/TLS 里面的 Select

    ssl2

  • 选择 Flexible 并点击 Save 按钮

    ssl3

[可选]关闭“强制HTTPS”

如果你的域名分发允许用户使用 HTTP,可以关闭 Always Use HTTPS(该选项默认关闭);否则,将其打开。

为了用户可以正常申请第三方证书,本专题将其关闭。

强制HTTPS

准备工作之:API ID 和 Token

选择域名,在 Overview 页面的右下角,有 API 信息,里面分别有 Zone ID 和 Account ID

API ID

My Profile - API Tokens页面(左上角用户图标 - My Profile - API Tokens),创建或管理 API Token。我们点击 Create Token 按钮来创建一个 Token,如图:

然后点击 Edit zone DNS 右边的 Use template 按钮:

token-2

按如下选项进行创建:

token-3

创建好之后,将 Token 复制保存起来。

Token 只显示一次,请妥善保管

token-4

代码仓库

本专题代码位于AxumCourse/domain-distribution。注意,只有购买了本专题的用户才能访问该仓库。

要查看完整内容,请先登录