Cloudflare Tunnel 搭配优选域名部署教程:单域名实现 Tunnel + SaaS 回源
Cloudflare Tunnel 搭配优选域名部署教程:单域名实现 Tunnel + SaaS 回源
本文介绍一种基于 Cloudflare Tunnel + Cloudflare SaaS 回源 + 优选域名 的部署方式。
整个方案只需要使用一个自己的域名,通过两个 Tunnel 路由分别负责访问入口和源站回源,再利用 Cloudflare 的 SaaS 自定义主机名功能,将访问域名与优选域名结合起来。
本文以以下域名为例:
- 主域名:
example.com- 应用域名:
appname.example.com- 源站域名:
origin-appname.example.com- SaaS 默认回源:
saas.example.com- CDN 优选域名:
cdn.example.com- 优选域名:
cdn.els.edu.rs
一、整体部署结构
最终的访问链路如下:
用户
│ 访问
▼
appname.example.com
│ CNAME
▼
cdn.example.com
│ CNAME
▼
cdn.els.edu.rs
│
▼
Cloudflare
│ SaaS 自定义主机名
▼
origin-appname.example.com
│ Cloudflare Tunnel
▼
内网应用
其中:
appname.example.com
是最终给用户使用的访问域名。
origin-appname.example.com
负责作为 Tunnel 的源站回源主机名。
cdn.example.com
负责指向 CF 优选域名。
saas.example.com
则作为 Cloudflare SaaS 配置中的默认回源域名。
二、创建 Cloudflare Tunnel
首先进入 Cloudflare Zero Trust:
Cloudflare
→ Zero Trust
→ Networks
→ Tunnels
创建一个新的 Cloudflare Tunnel。
例如:
Tunnel Name:
my-app
完成 Tunnel 创建之后,根据 Cloudflare 提供的方式,在内网服务器运行 cloudflared。
Tunnel 正常连接后,开始配置 Public Hostnames。
三、创建两个 Tunnel 路由
这里是整个方案比较关键的一步。
我们需要创建两个 Public Hostname。
3.1 第一个路由
第一个路由用于应用访问:
appname.example.com
例如:
Hostname:
appname.example.com
Service:
http://192.168.1.100:3000
其中:
192.168.1.100:3000
替换成你的实际内网服务地址。
3.2 第二个路由
第二个路由用于后续 SaaS 回源:
origin-appname.example.com
同样指向刚才的内网服务:
Hostname:
origin-appname.example.com
Service:
http://192.168.1.100:3000
因此现在实际上存在两个域名:
appname.example.com
↓
192.168.1.100:3000
origin-appname.example.com
↓
192.168.1.100:3000
两个域名最终都指向同一个内网服务。

四、检查 SSL/TLS 加密模式
进入:
Cloudflare
→ SSL/TLS
→ 概述
检查当前加密模式。
本方案要求:
灵活(Flexible)
也就是:
用户
↓ HTTPS
Cloudflare
↓ HTTP
源站

如果当前不是“灵活”,需要根据实际环境调整。
注意:SSL/TLS 模式会影响 Cloudflare 到源站之间的连接方式。如果你的实际 Tunnel/ 源站环境使用了不同的 TLS 配置,应以实际环境为准,不要机械套用本文配置。
五、检查 Cloudflare SaaS 功能
接下来需要确认 Cloudflare 的 SaaS 自定义主机名功能已经开通。
进入 Cloudflare 对应的 SaaS 配置页面,检查:
自定义主机名
Custom Hostnames
确保相关 SaaS 功能可用。
本文后面的:
appname.example.com
自定义回源主机名配置,就是依赖这一功能完成的。
六、创建 SaaS 默认回源域名
接下来进入:
Cloudflare
→ DNS
→ 记录
创建:
saas.example.com
指向:
7.7.7.7
配置类似:
类型:A
名称:saas
IPv4 地址:7.7.7.7
代理状态:已代理
也就是:
saas.example.com
↓
7.7.7.7
这里的 7.7.7.7 主要用于满足 Cloudflare SaaS 回源配置所需要的默认回源条件。
它并不是实际的应用源站地址。
同时需要打开 Cloudflare 的代理,也就是“小黄云”。
七、创建 CDN 优选域名
接下来创建:
cdn.example.com
将它 CNAME 到你的优选域名。
本文使用:
cdn.els.edu.rs
作为示例。
DNS 配置:
类型:CNAME
名称:cdn
目标:cdn.els.edu.rs
代理状态:仅 DNS
也就是:
cdn.example.com
↓
cdn.els.edu.rs
这里需要注意:
关闭 Cloudflare 代理
cdn.example.com 不开启小黄云。
也就是:
☁️ DNS Only
而不是:
☁️ Proxied
否则容易形成额外的 Cloudflare 代理层。
八、删除 Cloudflare Tunnel 自动创建的 DNS 记录
当创建 Cloudflare Tunnel Public Hostname 时,Cloudflare 通常会自动创建对应 DNS 记录。
例如:
appname.example.com
此时 DNS 中可能已经存在 Tunnel 自动创建的 CNAME 记录。
需要先删除这个自动创建的:
appname.example.com
记录。
因为我们接下来需要手动重新配置它。
九、重新创建 appname.example.com
重新进入:
Cloudflare
→ DNS
→ 记录
创建:
appname.example.com
配置:
类型:CNAME
名称:appname
目标:cdn.example.com
代理状态:仅 DNS
也就是:
appname.example.com
↓
cdn.example.com
↓
cdn.els.edu.rs
这里同样需要:
Proxy status:DNS Only
不要打开小黄云。

十、配置 SaaS 自定义主机名
现在进入 Cloudflare SaaS 的:
自定义主机名
→ 回源
添加一个新的回源自定义主机名。
填写:
自定义主机名:
appname.example.com
10.1 最低 TLS 版本
最低 TLS 版本设置为:
TLS 1.1
10.2 证书类型
证书类型选择:
Cloudflare 提供
10.3 证书验证方法
选择:
HTTP 验证
10.4 自定义源服务器
这里填写:
origin-appname.example.com
也就是:
appname.example.com
↓
SaaS 自定义主机名
↓
origin-appname.example.com
↓
Cloudflare Tunnel
↓
内网服务
完成配置后保存。

十一、最终 DNS 关系
完成上述配置后,DNS 大致如下:
| 类型 | 主机名 | 指向 | 代理 |
|---|---|---|---|
| A | saas.example.com |
7.7.7.7 |
开启 |
| CNAME | cdn.example.com |
cdn.els.edu.rs |
关闭 |
| CNAME | appname.example.com |
cdn.example.com |
关闭 |
Tunnel 中则存在:
appname.example.com
↓
内网服务
origin-appname.example.com
↓
内网服务
十二、最终完整链路
把所有配置串起来:
Cloudflare
│
用户 ── HTTPS ──> appname.example.com
│ CNAME
▼
cdn.example.com
│ CNAME
▼
cdn.els.edu.rs
│
▼
Cloudflare Edge
│
▼
SaaS Custom Hostname
│ Custom Origin
▼
origin-appname.example.com
│ Cloudflare Tunnel
▼
cloudflared
│
▼
内网服务器
│
▼
192.168.1.100:3000
因此,最终用户只需要访问:
https://appname.example.com
而不需要直接知道:
origin-appname.example.com
也不需要直接访问:
cdn.els.edu.rs
十三、为什么需要两个 Tunnel 路由?
这里可能是整个方案中最容易产生疑问的地方。
实际上:
appname.example.com
和:
origin-appname.example.com
虽然最终都连接到同一个内网服务,但是承担的作用不同。
appname.example.com
主要作为原始的 Tunnel Hostname。
origin-appname.example.com
主要作为 SaaS 自定义主机名中的:
Custom Origin Server
这样可以把“用户访问域名”和“Cloudflare 回源域名”分离开。
最终形成:
访问域名
appname.example.com
↓
优选入口
cdn.example.com
↓
cdn.els.edu.rs
↓
SaaS 回源
origin-appname.example.com
↓
Tunnel
内网服务
十四、部署完成后的检查
建议按照下面的顺序进行检查。
14.1 检查 Tunnel
确认 Tunnel 状态:
Healthy
并且两个 Public Hostname 都正常。
14.2 检查 DNS
执行:
nslookup appname.example.com
然后:
nslookup cdn.example.com
确认解析关系符合预期。
14.3 检查 HTTPS
执行:
curl -I https://appname.example.com
正常情况下应该能够获得 HTTP 响应。
14.4 检查 Cloudflare 响应
可以使用:
curl -I https://appname.example.com
观察:
server
cf-ray
等响应头。
14.5 浏览器访问
最后直接访问:
https://appname.example.com
确认应用能够正常打开。
十五、常见问题
15.1 为什么 appname.example.com 不能直接使用 Tunnel 自动生成的 DNS?
因为本方案需要让:
appname.example.com
进入:
cdn.example.com
→ 优选域名
然后再通过 SaaS 自定义主机名进行回源。
因此需要删除 Tunnel 自动创建的 DNS 记录,再按照本文方式重新创建。
15.2 为什么 cdn.example.com 必须关闭代理?
因为:
cdn.example.com
承担的是优选域名 CNAME 入口。
如果再次开启 Cloudflare Proxy,就可能形成额外的代理层,使实际链路与预期不一致。
因此本文配置采用:
DNS Only
15.3 为什么需要 saas.example.com?
它作为 Cloudflare SaaS 配置中的默认回源域名。
本文使用:
saas.example.com
→ 7.7.7.7
并开启 Cloudflare 代理。
这个地址不是实际应用服务器。
15.4 为什么还需要 origin-appname.example.com?
因为 SaaS 自定义主机名中需要指定:
Custom Origin Server
这里填写:
origin-appname.example.com
而这个域名又通过 Cloudflare Tunnel 连接到实际内网服务。
十六、配置总结
最终只需要记住下面这几个关系:
saas.example.com
↓
7.7.7.7
Proxied
cdn.example.com
↓
cdn.els.edu.rs
DNS Only
appname.example.com
↓
cdn.example.com
DNS Only
SaaS Custom Hostname
↓
appname.example.com
↓
Custom Origin
↓
origin-appname.example.com
Cloudflare Tunnel
appname.example.com
↓
内网服务
origin-appname.example.com
↓
内网服务
最终访问:
https://appname.example.com
即可进入内网部署的应用。
十七、最终效果
通过这种方式,可以将:
Cloudflare Tunnel
+
Cloudflare SaaS Custom Hostname
+
自定义域名
+
CF 优选域名
组合在一起。
整个方案只需要维护一个主域名:
example.com
然后通过不同的子域名承担不同职责:
appname.example.com # 用户访问入口
origin-appname.example.com # Tunnel 回源入口
cdn.example.com # 优选域名入口
saas.example.com # SaaS 默认回源
这样既保留了 Cloudflare Tunnel 的内网穿透能力,又可以在入口处使用指定的优选域名,同时将用户访问域名和实际 Tunnel 回源域名分离。
提示:Cloudflare 的 SaaS、Custom Hostnames、SSL/TLS 和 Tunnel 功能可能随套餐、账户类型及 Cloudflare 产品更新而变化。本文中的界面名称和配置逻辑以实际控制台为准。优选域名本身也可能发生线路、可用性和策略变化,部署后建议自行进行实际网络测试。
- 感谢你赐予我前进的力量

