前言
网上搜了不少使用 Cloudflare 优选 IP/域名 加速网站的教程,一般都是教你的怎么配置,看的也是云里雾里,索性去翻了下 Cloudflare for SaaS 的文档,官方有张图,看了按照我的理解大概描述下,看看能不能帮到新手,如果有错误希望大家指出下,最后讨论下一个域名来做优选可行吗?
原理
1. 最最原始的 DNS 记录
假设我有个服务器,IP 地址是 1.1.1.1,我在服务器上部署了一个 vaultwarden 的服务,通过一通操作,我现在可以通过 1.1.1.1:8080 访问 vaultwarden 服务了。
现在我不想通过 ip 和 端口来访问,所以我去买了个域名 test.dev,并且在服务区上安装了 nginx 作为反代,vaultwarden.test.dev 访问 8080 的服务,最重要的是:我要去 DNS 服务商配置我的 test.dev 域名的 DNS A 记录:
vaultwarden.test.dev → 1.1.1.1
现在我可以通过 vaultwarden.test.dev 来访问我的 vaultwarden 服务了,通过 ping vaultwarden.test.dev 可以看到 IP 是 1.1.1.1
2. 使用 Cloudflare 代理
在网上冲浪了一段时间后, 听说网上一个大善人叫 Cloudflare,这个大善人可以给我的网站提供免费的 https 证书,可以隐藏我的真实 IP 1.1.1.1,防止有人 对我的服务器做一些不好的事,还可以在我的网站被攻击时提供防护,所以我把我的 test.dev 域名的 namespace server 改到了 cloudflare,并且设置了 DNS 记录:
vaultwarden.test.dev → 1.1.1.1,最重要的是开启了黄色的小云朵:已代理
现在我还是可以通过 vaultwarden.test.dev 来访问我的 vaultwarden 服务,通过 ping vaultwarden.test.dev 可以看到 IP 已经变为 172.67.158.38,实际上访问的逻辑已经变成了:
vaultwarden.test.dev → Cloudflare → 1.1.1.1
访问我的域名时访问的是 Cloudflare 的网络,由 Cloudflare 去跟我的服务器打交道。只是感觉加了代理之后访问速度变慢了亿点点,算了,好歹可以用吧,毕竟有免费的 https 证书。
3. 使用 Cloudflare for SaaS
突然有一天,我的 vaultwarden.test.dev 无法访问了,ping 一下,ping 不通,172.67.158.38 这个 IP 也 ping 不通,咋回事?网上搜了下,可能是最近网络波动,或者因为 xxx 原因,导致 IP 被墙了,咋办,这个 IP 是 Cloudflare 分配给我的,我可不可以去 cloudflare 看看能不能更换?
不好意思,好像是不能的,那咋办?听说 visa.cn 也是用的 cloudflare,一直可以访问,而且他的访问速度比我的快多了,那能不能借用分配给 visa.cn 的 IP 去访问到 cloudflare,然后再让 cloudflare 去访问我的服务器?那就要解决两个问题:
- 我访问 vaultwarden.test.dev 的时候要借用分配给 visa.cn 的 IP 去跟 cloudflare 连接
- 与 cloudflare 连接后 cloudflare 知道我是谁,知道我的服务器是哪个,知道把我的请求转发到我的服务器上
第一个问题,可以通过配置 DNS CNAME记录来解决:
vaultwarden.test.dev → visa.cn
现在访问 vaultwarden.test.dev 可以看到 error 1016 的错误。
第二个问题,就需要通过 cloudflare for saas 来解决了。
看这张图,有两个点需要明确:
- 请求过来了,要把请求转发到哪个服务器去?
- cloudflare 怎么知道 www.custom1.com / shop.domain.com / store.shop.com / shop2.ecommerce.com 这四个域名是我的,需要我来处理这几个域名的请求,毕竟 cloudflare 网络上有 N 多个域名解析?
这两个点对应到 cloudflare,就是需要配置:
- 添加回退源 - 告诉 cloudflare 你真实服务器地址,请求来了发到你的服务器
- 自定义主机名 - 告诉 cloudflare 这几个域名需要帮你转发一下
4. 等等,为什么要两个域名
从上面的逻辑来说,理论上一个域名也可以啊,比如我设置了我的回退源:
cdn.test.dev → 1.1.1.1
添加自定义主机 vaultwarden.test.dev,vaultwarden.test.dev 的 DNS CNAME 到 visa.cn
这样当我访问 vaultwarden.test.dev 时,借用 visa.cn 的 cloudflare IP 访问 cloudflare 网络,然后就会走回退源访问 1.1.1.1。吗?
等等,真会走到回退源吗?cloudflare 查看 test.dev DNS 记录,明明有个 CNAME 记录是到 visa.cn 的,那就去 visa.cn 吧,所以,理论上就会一直是 error 1016 错误。
这就是为啥要两个域名,通常来说用第二个域名 fallback.dev 来做回退源:
当我访问 vaultwarden.test.dev 时,借用 visa.cn 的 cloudflare IP 访问 cloudflare 网络,这个时候会命中 fallback.dev 中添加的自定义主机,然后走回退源访问到 1.1.1.1
5. Cloudflare for SaaS 的配置
明白上面的逻辑之后,配置就很简单了,四步:
- 搞一个免费的域名 fallback.dev 做回退用,添加到 cloudfare,用 cloudflare 管理
- 添加一个 A 记录 cnd.fallback.dev 指向到 你的服务区 IP 1.1.1.1,把这个记录添加到回退源
- 添加一个自定义主机名 vaultwarden.test.dev
- 设置 vaultwarden.test.dev DNS CNAME 到 visa.cn (优选域名)(或者 A 记录,优选 IP)
6. 一个域名真的没办法做优选吗?
我在使用 DNSPod 做测试的时候,发现实际上是可以实现的。域名 test.dev 托管在 cloudflare 上,子域名 vaultwarden.test.dev 添加到 DNSPOD,在 cloudflare 上添加子域的 NS 记录到 DNSPOD。
其他的操作与两个域名一致,只是回退源也是使用 test.dev,最后再 DNS 添加一个记录:
vaultwarden.test.dev CNAME cdn.test.dev
有没有大佬解惑下
|