前言


网上搜了不少使用 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 去访问我的服务器?那就要解决两个问题:



  1. 我访问 vaultwarden.test.dev 的时候要借用分配给 visa.cn 的 IP 去跟 cloudflare 连接

  2. 与 cloudflare 连接后 cloudflare 知道我是谁,知道我的服务器是哪个,知道把我的请求转发到我的服务器上


第一个问题,可以通过配置 DNS CNAME记录来解决:


vaultwarden.test.devvisa.cn


现在访问 vaultwarden.test.dev 可以看到 error 1016 的错误。


第二个问题,就需要通过 cloudflare for saas 来解决了。



看这张图,有两个点需要明确:



  1. 请求过来了,要把请求转发到哪个服务器去?

  2. 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.devvaultwarden.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 的配置


明白上面的逻辑之后,配置就很简单了,四步:



  1. 搞一个免费的域名 fallback.dev 做回退用,添加到 cloudfare,用 cloudflare 管理

  2. 添加一个 A 记录 cnd.fallback.dev 指向到 你的服务区 IP 1.1.1.1,把这个记录添加到回退源

  3. 添加一个自定义主机名 vaultwarden.test.dev

  4. 设置 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


有没有大佬解惑下




举报· 244 次点击
登录 注册 站外分享
15 条回复  
vickunwu 初学 2024-10-31 00:43:05

感谢大佬解惑

搞了半天1016错误最后还是换了两个域名 :grinning:

neo 初学 2024-7-29 15:31:36
autonomy23 初学 2024-7-29 15:31:36

好好好,分析的很详细

zyzl 初学 2024-7-29 15:31:36

干货,感谢大佬分享。

LeoYoung 初学 2024-7-29 15:31:36

这个文章简单易懂,牛逼大佬

2171 初学 2024-7-29 15:31:36

一个域名理论上来说确实是可以的,但是在设定自定义主机名的时候cf有可能会直接在cf的面板给你添加记录进行验证解析,然后你dnspod那边的就不生效了从而导致失败,我是这么理解的不知道对不对

xjfkkk 初学 2024-7-29 15:31:36

没有saas太惨了

ufmirf 初学 2024-7-29 15:31:36

感谢分享

solo 初学 2024-7-29 15:31:36

:+1: 探索精神可贵! 分析的很详细

gzkjgo 初学 2024-7-29 15:31:36

感谢分享

12下一页
返回顶部