关闭

反向代理和内网穿透

时间: 2019-02-24阅读: 2937标签: 代理

概念

反向代理看上去看深奥,其实不然,只是因为汉语言文化的差异导致它看上去深奥。一般反派感觉都比较厉害和神秘。

要理解反向代理,我们就不得不说一下正向代理。


正向代理 (Forward Proxy)

所谓正向代理,就是大家通常说的代理。打个通俗的比方,你想跟你舅舅借钱,但不好开口(或者你舅妈会设法阻拦),就跟你妈说。这时母亲大人就是个正向代理。此时代理本质就是个桥的作用,这个桥让你能和桥对面的人交换信息。

正向代理是多对一的概念,例如你姐,你妹你可以通过你妈去跟舅舅借钱,但舅舅只有一个舅舅。舅舅有可能并不知道到底是谁真正在借钱,只知道钱给了你妈。


反向代理 (Reserve Proxy)

大家都有打客服电话的经历,比如10086,一般上来就是个语音系统,转接人工服务后嘟嘟嘟好几声才有人接听,说我是工号xxx,很高兴为你服务。这个客服总机号码10086就是个反向代理,

反向代理隐藏了真实的服务端,有可能有N个客服对应N个号码,但你只需要记一个10086,它会平衡客服之间的压力给你安排合适的人。

反向代理是一对多的概念,刚好和正向代理反过来了。

  • 正向代理代理的对象是客户端
  • 反向代理代理的对象是服务端

反向代理最常见的作用就是负载均衡。比如你访问baidu的域名后,baidu会根据你的ip地址和网络情况给你分配最快的服务器,这个分配服务器的服务器就是反向代理。

反向代理还有一个场景就是内网穿透,因为服务对象是在内网里,你需要通过代理才能访问到。


内网穿透

从外网是没办法直接访问到内网的资源的,因为内网是一个局域网不在一个网段,而且还有防火墙在。

1550826381553

这时候你弄个反向代理就可以解决这个问题:

  • 内网服务器访问代理服务器
  • 握手,建立通道
  • 外网用户访问代理,代理通过通道和内网通信

1550848043738

举一个具体例子,TeamViewer的服务端(外网)就是个反向代理,它需要和TeamViewer客户端(内网)一直保持通信,建立一个通道(TeamViewer ID)。当远程连接这台机器时,你需要登录到TeamViewer服务器,然后通过代理通道(TeamViewer ID)和远程机器连接。


一些反向代理服务

远程连接内网机器的桌面服务是最常见的需求,有时候我们希望做的是自己的机器上跑一些服务能够从外网访问,比如demo,博客,甚至私有云等等。

TeamViewer和向日葵大家可能都知道,我说一些不一样的。


frp

开源界最流行的反向代理之一,frp全称FaskReverseProxy,它的目标是做最快速可靠的反向代理,用GO语言实现,在Github上正在快速迭代中。安装和配置都非常简单,只需要几个命令就可以完成。frp支持的客户端非常丰富,树莓派,路由器,安卓手机等等,可玩性很高。

frp服务可以让你本地的web项目提供给外网访问,特别适合向别人展示你本机的web demo 以及调试一些远程的API (比如微信公众号,企业号的开发)。

FRP还可以轻松代理TCP,HTTPS,SSH等等协议,你需要有一台具有公网IP的机器,最好加一个域名。


ngrok

曾经是开源界反向代理软件的老大,到2.0以后选择闭源,最后开源的版本2016年后就没有再更新,止于1.7。基于C语言实现,配置略复杂,不过据说灵活性和稳定性超好。

ngrok也可以代理常见的各种协议,自己搭建只能用早期的开源版本。或者选择商业公司提供的收费服务,国内外可以搜到很多提供NGROK服务的网站,可不可靠不太敢说,但真的很多。

这里列举一些知乎推荐过的,你也可以通过ngrok这个关键字搜索到很多。

  • natapp.cn
  • 小米球
  • Sunny-Ngrok
  • echosite


dog-tunnel

翻译过来就是狗洞吧,国人做的,基于GO语言开发,在GitHub上活跃度还不错,有1k+的星星,有兴趣可以试一下。


serveo.net

无需注册,无需配置,只需要 ssh 就行,没有客户端,支持多端口映射,支持自定义子域名,只要一行代码

ssh -R 80:localhost:3000 http://serveo.net

我试了一下,临时用一下真的很棒!


写在最后

内网服务本来就是比较敏感的,所以从数据安全的角度看我觉得还是自己搭建代理服务更可靠。用不靠谱的服务有很大风险,还有可能很坑,非常坑。

比如nat123和花生壳,一步一步诱导你付费,协议,端口,流量,速度,域名每个细节都要收费,还不一次说清楚,你付完钱才知道后面还要付钱的,别问我怎么知道的。

更多讨论,你也可以去看知乎:https://www.zhihu.com/question/49629610/

原文来自:https://betacat.online/posts/2019-02-22/reverse-proxy-and-intranet-through/


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/2105

关闭

Nginx 反向代理返回结果为空的问题

现在有一个 Web 项目,前端是使用 Vue.js 开发的,整个前端需要部署到 K8S 上,后端和前端分开,同样也需要部署到 K8S 上,因此二者需要打包为 Docker 镜像。对前端来说,打包 Docker 就遇到了一个问题:跨域访问问题。

Vue多环境代理配置

多人协作模式下,修改代理比较麻烦,而且很容易某个开发人员会修改了vue.config.js文件后提交了。第一,很容易引起冲突。 第二,很容易出现代理错误,需要排查。而且现在微服务盛行

vue proxy跨域代理https

vue-cli里面的proxyTable要怎么代理https?看的网络上面都是http的,不知道该如何设置。如果直接设置https://**,就会报错,报的是未定义的错误

node怎么做反向代理?

在实际工程开发中,会有前后端分离的需求。使用node.js反向代理的目的:实现前后端分离,前端减少路径请求的所需的路由文件。

node.js代理访问

本地开发,代理访问,防止跨域(一般通过webpack配置代理即可),特殊情况如携带一些自定义的登录cookie则需要通过自己写node,作为一种server中间层,单线程异步可以缓解服务器压力

通过nginx反向代理来调试代码

现在公司项目都是前后端分离的方式开发,有些时候由于某些新需求开发或者 bug 修改,想要让前端直接连到我本地开发环境进行调试,而前端代码我并没有,只能通过前端部署的测试环境进行测试

Proxy代理

在一个系统中,总要存储一些数据,对于这些数据,可能有一些是希望我们访问的,但是总有一些是中重要的,不希望我们访问的,希望保护起来,因此ES6新增了代理,在目标对象前架设个拦截层

.Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索

公司项目最近出现获取访问域名、端口、IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数据。

NodeJS中配置请求代理服务器

大佬让我换个机器重新装一下,但是因为我的里面用到了一个图片处理库 sharp 装起来很烦,然后就研究研究能不能搞个代理服务器。

vue proxy代理跨域

changeOrigin的属性值为一个布尔值,如果设置为true,那么本地会虚拟一个NODE服务端接收你的请求并代你发送该请求(中间件)。[本质上是本地开了一个服务器dev-server,所有的请求都通过这里转发出去。]

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!