家庭数据中心系列 应用发布之反向代理篇(上)
本文最后更新于 360 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

当家庭数据中心完成了硬件、软件、应用的部署之后,就需要将应用进行对外发布。和传统的家庭宽带应用少不同,家庭数据中心的应用发布会涉及到很多应用,远不是简单的在路由器上映射几个端口(前提是有公网地址)就能搞定的,而现在的应用又基本都是以B/S架构的方式发布,所以反向代理技术理所当然的成为了我们的最佳选择。


说到反向代理,就不得不提一下正向代理,我这里简单说一下自己对正反向代理的理解。

首先大家要明白,不管是正向还是反向,代理一定是针对访问请求而言的。正常的访问流程,是客户端对服务器端(应用)发起请求,然后服务端(应用)进行响应,这个过程只是2者在参与:

image.png

而如果多了一个代理,则整个流程就被切断成2个独立的阶段:
image.png

在这个场景中,web客户端实际发起请求的对象就是代理服务器,并不知道实际应用的存在;而应用端收到的所有请求都是来自代理服务器,其所知的客户端只有代理服务器这台设备。不管是正向代理还是反向代理,流程上都是一样的,那么正向代理和反向代理的区别在哪里呢?其实主要差别是服务的对象不同。

正向代理:

如果代理服务器主要服务的对象的是客户端,存在的主要目的是汇总客户端请求,然后向应用端发送请求时隐藏客户端IP地址(也有需要传递客户端IP地址情况,需要单独的设置),这种就是正向代理。一般正向代理位置更靠近客户端,甚至可能就在一个安全域里,因为其代理客户端请求发往服务器,和客户端直接访问的流量方向一致,所以称为“正向”。一般正向代理需要在浏览器中进行设置。

反向代理:

如果代理服务器主要服务的对象的是服务器端(应用),存在的主要目的是接受客户端发来的请求,然后根据host的不同内容分发到不同的服务器(或者相同服务器的不同端口),这种就是反向代理。一般反向代理的位置更靠近服务器端,甚至可能就在一个安全域里。因为其主要面向服务器端,和正向代理面向客户端正好相反,所以称为“反向”。

另外还有一种“透明代理”,这种主要指不需要设置的正向代理,这里就不多提了。


根据家庭宽带是否有公网地址,有不同的推荐部署方式。

1、有公网IPv4地址

这种情况下推荐在内网部署的反向代理(假定内网IP为192.168.1.1,采用https协议监听443端口),然后在路由器上将某一个端口作为统一进入端口(假定为44444),通过端口映射指向192.168.1.1的443端口。接下来只需要将每个应用对应于不同的三级域名(假定app1对应的三级域名为app1.example.com),就可以通过:https://app1.example.com:44444直接进行访问(当然前提是反向代理上正确进行了app1.example.com的相关配置)。


另:关于域名和应用绑定的问题,因为是家庭宽带,所以肯定是动态域名的解决方案。目前看来最优化的方式,是出口路由器作为动态域名的客户端,当接口公网IP发生变化的时候,路由器就自动去域名提供商修改记录(如果出口支持多重拨号,路由器的动态域名功能也要支持多个接口IP的修改)。从我的使用上来说,爱快的动态路由客户端非常强,详情见我另一篇文章:爱快软路由系列 最强多拨软路由:爱快


如果大家不喜欢在链接后面加端口的访问方式,就需要折腾和花钱了:
1、购买云主机,备案,然后在云主机上配置一级反向代理指向家里的反向代理;或者使用CDN,把家里的站点作为源站(需要公网ip地址,ipv4和ipv6都可以),最关键的是CDN的源站端口是可自定义的,所以可以完美回避家庭宽带没有80和443端口的问题。
2、cloudflare免费版也可以自定义源站端口,同样可以解决443和80端口的问题,是不想备案的朋友的首选,不过就是访问体验稍差,可能比使用国内cdn慢个2-3秒,具体配置参见我另一篇文章:家庭数据中心系列 通过cloudflare的Origin Rules解决建站有公网IP却没有合法的80、443端口的问题)。

2、有公网IPv6地址

这种情况下,不再需要在路由器上进行端口映射了(废话,每个设备都是公网IP了),理论上也可以不需要反向代理,CDN直接指向应用的IPv6地址的对应端口(CDN和源站之间可以是IPv4协议,也可以是IPv6协议,当然80和443端口就别想了)。不过,如果只是简单的让自己访问自己的应用是没问题,但是如果要建立家庭数据中心对外提供访问,这样肯定就不行了:谁敢直接把裸应用部署在公网上?所以最终,即便是有IPv6公网地址,也要老老实实搭建反向代理,接受到访问请求后,通过后端安全设备的过滤(例如WAF,防DDOS设备等),再将请求转发到应用(反向代理设备上启用公网IPv6即可,具体的应用所在设备可以不用启用ipv6,反向代理和应用之间通信使用内网地址就行了,更安全,虽然IPv6地址之多不怕扫描~)。

3、没有公网IP地址

这种情况下,可选的操作就只有一种了:使用cloudflare的tunnel功能,具体配置请参考我另一篇文章:家庭数据中心系列 通过无公网IP的家庭宽带白嫖cloudflare实现快速建站(通用)

总体而言,不管家庭宽带是哪种类型,都是可以搭建家庭数据中心的,只不过有公网IP的选择更多,且可玩性更高。

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

发送评论 编辑评论


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

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN