Worker自定义域与国内节点兼容性解读-满久琦的个人网站

Worker自定义域与国内节点兼容性解读

6 人参与

最近琢磨Worker,发现一个挺有意思的事儿,好像不少人都卡在自定义域名和国内节点这坎儿上了。你说折腾半天代码跑通了,结果一用国内节点访问,啪,直接给你来个522超时,那感觉就像你兴冲冲跑去吃火锅,结果发现锅底根本没点火。

这个“522”到底是个什么鬼?

说白了,这就是个“找不到路”的问题。咱们得先明白Worker的默认玩法。你写完代码,Cloudflare会给你分配一个 *.workers.dev 的域名,比如你叫 myapp.xxx.workers.dev。这个域名,它在墙外跑得欢,但在咱们这儿,它基本就等于“此路不通”。

这时候,如果你用了国内的CDN节点(比如阿里云ESA或者其他国内的云服务商来反代你的Worker),麻烦就来了。国内的服务器小哥很敬业,他按照你的指示,跑去 myapp.xxx.workers.dev 这个地址拿东西。结果呢?他根本连不上这个地址,因为它在国内访问不了啊。小哥在那儿一直等、一直敲门,门里头没人应,最后等得不耐烦了,就只能回头跟你这个用户说:“报告老板,源头没反应,超时了(522)”。

自定义域名,就是给你的Worker办张“身份证”

怎么解决?关键一步就是给你的Worker绑定一个自定义域名。这操作不复杂,在你Worker的设置里找到“Custom Domains”(自定义域),把你自己的、在国内能正常访问的域名(比如 api.yourdomain.com)绑上去。

这事儿干完,性质就变了。你的Worker代码不再只挂在那个“境外户口” workers.dev 上,它同时也有了一个“国内合法身份” api.yourdomain.com。当国内CDN节点的小哥再去回源时,你告诉他:“别找那个 workers.dev 了,你去 api.yourdomain.com 这个地址拿。” 这下好了,这个地址是能正常解析和访问的,小哥顺利拿到数据,欢天喜地地返回给用户,页面刷一下就出来了。

光绑域名就行了吗?还得注意“回源HOST”

你以为绑完域名就万事大吉?另一个坑在CDN设置里等着呢,叫“回源HOST”或者“回源Host头”。这玩意儿是啥?你可以把它理解成“敲门时的自我介绍”。

国内CDN节点的小哥去敲 api.yourdomain.com 的门时,他得说一声:“我是来找 api.yourdomain.com 的!” 如果这个“自我介绍”没弄对,比如你设置CDN回源到 api.yourdomain.com,但HOST头却填成了你源站的IP或者别的什么,Cloudflare那边可能就不认账,觉得这访问不对劲,直接给拦截掉。

所以,在设置国内CDN反代时,回源HOST一定要设置成你绑定的那个自定义域名本身,也就是跟随原站域名。这样才是一次规规矩矩的拜访。

非标端口的“独木桥”问题

还有些朋友更会玩,Worker不用默认的443端口,偏要用个3000、8080之类的端口。这在CDN回源设置里也能配,指定个回源端口就行。

但这里有个限制得心里有数:很多国内CDN服务,当你为一个域名(比如 api.yourdomain.com)配置了非标准回源端口后,这个域名下的所有请求,都会走这个独木桥。你想再给 api.yourdomain.com 加一个用443端口的回源配置?通常不行,系统会打架,结果可能又是522。

所以,用非标端口的话,最好提前规划好,这个域名就专门服务于这个端口的Worker,别想着它还能身兼数职。

折腾技术嘛,就像拼乐高,每一块都得卡对位置。自定义域名是让Worker在国内“合法上岗”的关键一步,配好了,速度起飞;配错了,或者忘了配,那就只能对着522错误码干瞪眼了。说到底,就是让数据流的每一步,都在能通行的路上。

参与讨论

6 条评论

延伸阅读