上一篇提到:如果不介意使用三级域名,套上一个CDN,HTTP回源或许是最好的方式。
今天来写写教程,注意:优化效果在校园网是体验不出来的,流量才行。

CloudFlare Tunnel 优化简述

CloudFlare Tunnel 工作流程大致为,我们的小主机通过cloudflare提供的特定ip的7844端口连接到cloudflare tunnel,用户就可以通过域名进行访问了。

从图中可以看出,主要优化有两方面,一个是小主机到cloudflare的优化,另一个是用户到cloudflare的优化。现在主要说优化2。

为什么优化可以实现?

对于校园网来说,cloudflare的流量最终都会前往香港节点,所以影响不是很大,而对于非校园网的情况来说,几乎解析出来的IP最后都是到美国的,通过让小主机走香港代理和让用户走香港CDN,都是为了使我们的流量到香港,最终实现低延迟的效果。

为什么使用三级域名?

  1. 域名必须在CloudFlare上才能使用Tunnel服务。
  2. CloudFlare会7天检查一次NS记录,第一次检查会显示已移动,没有影响,第二次检查会直接删除域名。
  3. CloudFlare没有在国内的DNS服务器,DNS解析速度非常感人。所以需要NS二级域名到其他国内DNS,太多了每个都得解析一遍不太现实。

实现方式

%E6%9C%AA%E5%91%BD%E5%90%8D%E7%BB%98%E5%9B%BE.drawio_%283%29.png

以DNSPOD和CloudFlare配合为例,步骤如下:

  1. 解析一个二级域名NS记录到DNSPOD

    我这里使用的是n,如果要修改,下面代码也需要修改。

  2. 添加一个worker,内容如下

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    	function handleRequest(request) {
    	    let url = new URL(request.url);
    
    	    if (url.protocol == 'wss:') {
    	        url.protocol = 'ws:'
    	    }
    
    	    url.protocol = 'https:'
    
    	    // 删除二级
    	    url.host = url.host.replace('.n.', '.');
    	    return fetch(new Request(url, request));
    	}
    
    	addEventListener("fetch", (event) = >{
    	    event.respondWith(handleRequest(event.request));
    	});
    

    进行路由绑定*.n.imbai.cn/*

  3. 在DNSPOD中添加泛域名解析到第三方CDN

  4. 在第三方CDN平台添加回源到cloudflare ip即可。

  5. 之后,只需要在tunnel中添加域名,并在第三方CDN面板中添加一个域名即可。

总结

其实可以看出,过程就是通过CDN回源到cloudflare worker,worker将添加的3级域名去除变成2级之后反向代理到最终的域名。

其中的可操作性非常大,在第三步解析到CloudFlare优选域名就相当于优选IP了。【个人感觉效果不是很好,放弃了】

如果CDN平台支持比较复杂的自定义回源规则,worker那一步也可以免了。【这其实是比较好的,但是很多cdn平台回源规则很单一】

最后再说说缺点吧,worker的运行时间是有限制的,那种需要长时间的下载任务,会导致链接断开,用来下载东西是不行的,只能当个web优化。