如何避免ESA反代被CF拦截-满久琦的个人网站

如何避免ESA反代被CF拦截

2 人参与

前两天看群里有人折腾ESA反代Worker,结果一直报错,被Cloudflare拦得死死的。那场面,像极了想抄近路回家,结果发现那条小巷子被物业装了铁门,还上了把新锁。

为啥CF总爱当这个“拦路虎”?

这事儿其实不能全怪CF。你想啊,你用一个服务(ESA)去请求另一个服务(CF的Worker),在CF看来,这就有点像陌生人敲门,它肯定得盘问几句。尤其是当你的请求“打扮”得不太对劲的时候——比如,你告诉ESA去代理worker.dev的地址,但回源请求里带的“我是谁”(HOST头)却写成了你自己的域名,CF一看:“哎,你这访问者声称的身份和实际要访问的地址对不上啊,可疑,拦了!”

HOST头,一个容易踩的坑

很多人设置反代,光顾着填目标地址,回源HOST这一项随手就用了默认或者自己的域名。这就坏事了。正确的姿势是,在ESA的回源HOST设置里,老老实实地选择“跟随原站域名”。说白了,就是让ESA去敲门时,自称是来找“原屋主”(Worker域名)的,这样CF才会觉得合情合理,给你开门。

大陆节点的特殊“待遇”

如果你图快,用了ESA的国内节点,那还有个坑在等着你。Worker默认给的那个*.workers.dev域名,在大陆访问……嗯,你懂的,比较随缘。国内节点去访问一个可能不通的地址,结果就是经典的522超时,原地转圈圈然后失败。

解决办法倒也不复杂:给你的Worker绑个自定义域名。这个域名得是你自己的,并且解析正常。绑好之后,ESA国内节点回源就找这个自定义域名,路通了,自然就快了。这就像给那个难找的后巷装了个正规的门牌号,快递员(ESA)好找,物业(网络环境)也认。

端口问题,一夫当关

有时候你的Worker可能跑在非443端口上。在ESA里,你可以为整个域名设置一个回源端口。但注意了,这里有个不太灵活的地方:这个设置是针对“整个域名”的。意思是,你绑在ESA上的这个域名,它下面的所有子域名,回源都得走你设定的这个端口。

如果你想用同一个主域名,同时反代一个跑在3000端口的Worker和一个跑在443端口的网站,那就尴尬了。ESA会固执地用你设置的端口去访问所有目标,访问443那个自然就超时了。所以,最好用不同的子域名来区分不同端口的服务,省得它们“打架”。

折腾这些,无非是想让访问更快点,体验更好点。中间踩几个坑,绕点路,都正常。搞清楚CF的规矩,顺着它的逻辑来设置,那道铁门自然就开了。剩下的,就是享受优化后那点速度提升带来的小满足了。

参与讨论

2 条评论

延伸阅读