家庭数据中心系列 通过cloudflare的Origin Rules解决建站有公网IP却没有合法的80、443端口的问题
本文最后更新于 275 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

何谓"建站有公网IP却没有合法的80、443端口"?这主要指两种场景:有公网IP的家庭宽带和没有备案的云主机。

1、有公网IP的家庭宽带

现在有公网IP的家庭宽带(主要是IPv6公网地址和少量存量的IPv4公网IP),80和443端口是直接从网络层面封死了的,而一般人访问都是习惯在浏览器地址栏输入域名以后直接回车访问,很少有人能接受输入完整链接然后加端口的方式来访问,例如:http://www.example.com:55555或者https://www.example.com:55555(就算有人愿意,也会觉得比较没有逼格。。。),而直接浏览器地址栏输入域名回车就可以访问的前提就是80和443端口是可用的,所以对于家庭宽带有公网IP又想用来建站的朋友来说,解决80和443端口的问题就是第一个需要解决的问题。


先闲话一番,其实现在新装的家庭宽带想有公网IPv4地址是很难的事情了,据成都电信给我的答复,好像是22年开始国家推行什么强国政策,新装宽带IPv4公网地址是不分配的了(除非使用399以上套餐并每月额外给100元的服务费~~~,就问你怕不怕),不过IPv6公网地址可以有。现有的IPv4公网地址基本都是以前老用户默认保留下来的,而且如果这些老用户升级套餐甚至都不能保证公网IPv4地址还有(据说之前工信部投诉可以拿回公网IPv4地址,不过可能需要半个月到1个月的时间,我觉得如果真是国家政策,以后投诉有没有用也难说)。当然,如果不考虑多拨,只从建站的角度来讲,IPv6和IPv4倒也没啥区别,而且其实IPv6公网地址也可以多拨,不过现在还没普及,使用成本比较高,这个以后有空我会单独写一篇文章来讲。


2、有云主机而域名没有备案

有了云主机,就有了固定公网IPv4地址,并且80和443端口在网络层是通的,但是如果你的域名没有备案的话,即使把域名解析到云主机的固定公网IPv4地址上,仍旧无法访问的,这是因为备案系统的存在。简单来说,只要是http协议,不管是http(80端口),还是https(443端口),无所不在的监测会查看到你的http请求的host字段,会将其中访问的域名拿出来和备案地址库的白名单进行比对,如果是备案过的域名,则允许你正常访问;如果是没备案过的域名,则会根据你解析的IP所属的云供应商是谁弹出对应该的提示框,例如IP是腾讯云的主机,则会弹出如下提示:

image.png

这个时候你的访问请求甚至没有到达目的地就被强制重定向到这个页面。值得一提的是,这种检测和拦截仅仅是针对80和443端口,也就是不加端口的http和https类型访问,所以如果加其他端口(非80和443)是不受备案系统影响的,当然,正常人也不愿意去加这个端口。

上面这两种场景应该是我们最常遇到的,所以无论是想用有公网IP的家庭宽带建站或者有云主机有固定公网IP但是不想域名备案而建站的朋友来说,最优先解决的肯定是无法使用80和443端口的问题。

那么如何解决这个问题呢?要说清楚这个,需要首先能理解CDN对应的”源站”这个概念。

CDN的源站

简单来说,CDN就是一个分布式的大型反向代理,而”源站”就是配置反向代理时需要指定的后端真实服务器的访问url,以宝塔linux面板配置的反向代理为例:

image.png

CDN的”源站”就是类似于反向代理红框中配置的目标URL。

如果域名是备案过的域名,就可以使用国内云供应商的CDN服务,以腾讯云的CDN配置为例看下选项:

image.png

可以看到腾讯云的CDN在源站类型、源站协议、源站地址、回源HOST都是可选的,而最关键的是,源站地址可以选IP或者域名,并且端口是可选的,也就是说可以是非标端口(80和443),结合后面可以单独指定的回源HOST,这个可玩范围就非常大了,随便举个例子:以域名方式指定源站为source.example.com,端口指个55555,就可以直接把源站指向一个提供类似托管服务器的机构或者个人(比如有公网IP的家庭宽带),然后只要在这个机构或者个人的设备上把你自己的网站域名作为回源HOST正确配置就可以作为CDN的源站了(我的博客就是这样,这就是我称之为的家庭数据中心的原因)。

可惜的是,cloudflare默认的DNS代理方式不能像腾讯云CDN这样指定端口:
比如cloudflare的free版:

image.png

就是说源站地址只能是IP,没有端口选项,也就是说只能标准端口(中国大陆地区是80和443,其他地区还有更多的默认端口),没有回源HOST,也就是说在这个指定的IP:43.44.45.46的80或者443端口上必须有对应名称为blog.example.com的站点,而不像腾讯云CDN配置的回源host那样可以是其他的站点名称。

回源站点名称这个的确是没有办法像腾讯云CDN那样随便乱写(毕竟cloudflare是基于DNS域名工作的),但是源端口真的就只能是80和443了吗?前面提到的2个主要场景可都是没有80和443端口的。

其实还是可以解决的,这个就要通过cloudflare的Origin Rules功能来实现了。

Origin Rules

image.png

由上图可知,官方介绍为:”自定义匹配流量的去向以及使用哪些参数。允许主机标头、SNI、DNS 记录和目标端口替代”,注意目标端口替代,这个就是可以自定义源站的目标端口。

点击创建规则:

image.png

上图就创建了一个最简单的回源规则:当传入请求为https时(cloudlflare本来就会自动套https),源站的目标端口改为55555。当然,还可以用and 或者 or的方式添加规则,比如:
image.png

如上图加了一个and之后,只有访问https://www.example.com这个主机名时候源站端口才是55555,这样可以不同的主机名对应不同的源站端口了,更加灵活了。并且条件除了主机名、SSL/HTTPS以外,还有很多选项:
image.png

大家可以根据需要进行选择。

缺点

通过这种方式的确可以解决80,443端口的问题,不过却有以下2个缺点:
1、必须将域名的DNS解析指向cloudflare
如果域名是在国内DNS供应商买的(例如阿里云或者腾讯云),需要将DNS指向cloudflare并且进行相应的设置(具体步骤可以参考我另一篇文章:奇技淫巧系列 通过国内备案云主机白嫖cloudflare实现国外快速访问国内站点)
2、国内访问速度比较看脸
因为使用cloudflare建站属于”境外”网站,毕竟没有经过备案,这种国内是有负优化的,各个省份访问速度比较看脸。所以如果很在乎国内访问体验,还是老老实实备案把~~。

另:目前使用cloudflare建站,我分别针对有公网IP和无公网IP提供2种方案:无公网IP只能采用tunnel的方式(参见:奇技淫巧系列 通过无公网IP的家庭宽带白嫖cloudflare实现快速建站(通用)),而有公网IP又分有合法80,443端口(参见:奇技淫巧系列 通过国内备案云主机白嫖cloudflare实现国外快速访问国内站点)和没有合法80,443端口(就是本文方式),其中,tunnel不管有无公网IP都能采用,是真正的通杀方式,而速度也未见得慢多少,关键还更安全(毕竟算是直接穿透到内部环境),所以正常情况下我建议尽量用tunnel方式,只不过请配置好cloudflare提供的DDOS,WAF等安全策略,毕竟这种情况下安全就只能靠cloudflare了。

下面是我用站长工具测试采用不同建站方式的域名的访问速度,供大家进行参考。

用本文方式直接改源站端口指向家庭宽带公网IP对应域名的测试结果:

image.png

用tunnel方式模拟没有公网IP的家庭宽带建站的对应域名的测试结果:
image.png

上面两种测试结果其实大差不差,因为每次测试结果都不一样,所以不好比较哪种速度更快,大家有条件也可以自行测试比较。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       
error:
zh_CN
春节
快乐