cf的两种ip
Cloudflare CDN 的 IP 段分为 Anycast IP 和回源 IP。其中anycast ip是可以自选指定和用户通信的ip而回源ip不能直接用
前者是用户访问网站时,访问的 IP。
后者是 CDN 访问网站源服务器的 IP(CDN 本质就是反向代哩)。
用户 <=> Cloudflare Anycast IP 节点 <=> 在各 CDN 节点中寻找缓存,找到就直接返回给用户;如果没找到就继续 <=> Cloudflare 回源 IP 节点 <=> 网站源服务器。
而不管是 Anycast IP 还是回源 IP,在全球各地都有服务器(国內除外),回源会选择离你网站源服务器最近的节点,所以不用担心距离问题。
anycast ip特点
因为 Cloudflare CDN 用的是 Anycast 技术,这代表任何 CDN 节点 IP 的实际位置都是不断变化的。
想要知道该 CDN IP 当前是哪个地区,可以通过访问 https://CDN-IP/cdn-cgi/trace 来查看。
或者https://www.cloudflare.com/cdn-cgi/trace
例如:https://1.0.0.1/cdn-cgi/trace 中的 colo=LAX,LAX 就是洛杉矶。
也就是先要去扫描并区分出来地区才行,而这个地区不是固定的,会经常变动(调整),比如前几天起飞的ip可能今天再用就拉夸了。
Cloudflare CDN 用到了Anycast 技术,所以即使你 Hosts 指向一个 Cloudflare CDN 节点 IP 访问某个网站,该网站后台看到的 CDN 节点请求 IP 其实是其他 CDN 节点 IP,并不是同一个 IP。
访问 CDN 流程:
你访问使用 Cloudflare CDN 的网站时,CDN 会分配给你一个距离最近的 IP(具体看情况),你访问这个 IP 后,如果有缓存就直接发给你了,如果没有缓存就会选个距离网站源服务器 IP 最近的 CDN 节点去回源(请求网页内容)。
所以说,你访问网站时解析的明明是 IP A,但是网站后台看到的回源 CDN IP 却是 B。
并不说你通过 CDN IP A 去访问网站,CDN 就会通过 IP A 去回源访问你的网站服务器。
Cloudflare CDN 公开的所有 IP 段中,分为两类。
一类是回源 IP,即是 Cloudflare CDN 专门去网站源服务器回源获取数据时用的 IP。
一类是任播 IP,即是用户访问网站时用的 CDN IP。
这也是为什么我的软件第一步延迟测速后,下载测速时就剩下一部分 IP 段的原因,因为过滤掉了不能用的和回源 IP。
回源 IP 是由 Cloudflare CDN 根据情况分配的,用户是无法主动控制的。
访问cf的流程是,用户访问cf入口节点,入口节点将流量转发回源节点,回源节点访问你的源服务器。
你只需要关注入口节点快不快稳不稳就行了,回源节点是cf自动调整的,你干预不了。
至于回源的话,相比而言对速度的影响就小得多了,因为 CDN 也不傻,会尽力选择最短路线的 CDN 节点回源,而且回源节点也不是固定的,还取决于访客位置 及 回源节点负载情况。
访客(中国) <=> Cloudflare CDN(美西) <=> 源站(美西)
访客(香港) <=> Cloudflare CDN(香港) <=> 源站(美西)
两者物理距离一样但延迟和速度下面要强上面n倍。
即cf的anycast节点到原服务器距离对速度影响要比访客到anycast节点距离小很多。
所以,假如cf节点在美西,而源站在东京,并不相当于绕美西的东京,而是几乎等同美西机,因为cf回源东京到美西很快很快。