前端开发中,经常会提到node
服务器做反向代理
,去请求后台数据,但是对于很多前端开发人员来说,只是知道有个词叫反向代理
,然后就没有然后了。这里记录一下反向代理的概念及好处。
概念
在计算机网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的
IP
地址,而不知道在代理服务器后面的服务器集群的存在。与前向代理不同,前向代理作为客户端的代理,将从互联网上获取的资源返回给一个或多个的客户端,服务端(如Web服务器)只知道代理的
IP
地址而不知道客户端的IP
地址;而反向代理是作为服务器端(如Web服务器)的代理使用,而不是客户端。客户端借由前向代理可以间接访问很多不同互联网服务器(集群)的资源,而反向代理是供很多客户端都通过它间接访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器。反向代理在现时的互联网中并不少见,而另一些例子,像是
CDN
、SNI
代理等,是反向代理结合DNS
的一类延伸应用。——wiki
其实wiki的描述已经很好的解释了什么是反向代理,如果还是一头雾水,往下看。
正向代理
有反向代理就肯定有正向代理,毕竟有正才有反嘛。那什么是正向代理呢,我们举一个生活中的例子:下馆子
。(此处敲黑板,主角是小明)
- 小明和朋友 约好了去吃饭(为什么是小明?没有为什么!),然后他们挑了一个饭店叫 菜馆子(没有为什么!随便挑的!),然后进去饭店里面,找个位置坐下来,做到了7号桌(没有为什么,1到6都有人!)
- 服务员上来了,问:想吃点什么呢?小明和朋友挑了水煮鱼,地三鲜和花生米,服务员记下来就往后厨去了,对 后厨 说了一句:7号桌!水煮鱼地三鲜加一盘花生米!然后后厨开始炒菜了。
- 菜好了,服务员端上来,小明和朋友就开吃了,吃完就各回各家去了,结束。
我们回头看一下这个过程:
- 小明并不知道后出在哪里,他只想吃饭,其他的不用管,就像我们打开百度去搜资料,我只想看到资料。
- 后厨只想把菜做好端出去,就像服务器只想把东西通过请求传送过来。
- 服务员只想代替给小明报菜名加上端过来菜,期间小明和后厨各自做各自的事情。
这里,服务员就是一个正向代理
。客户端(也就是你们手中的电脑)请求服务器,一般用不到代理,直接请求就好了。但是如果!我想请求www.google.com
,他不给访问,就是小明喊破了喉咙,后厨也听不到,这时候就需要一个人代替小明去后厨,然后代替后厨把菜端过来(当然也可以不代替),这时候就需要一个正向代理的服务器代替小明去请求谷歌。VPN(翻墙)就是这个意思,你访问代理服务器,然后让代理服务器去请求谷歌,然后把资料给你。这样有个好处,谷歌看到的只有代理服务器,并不知道你的存在,后面的应该就知道了把。
反向代理
现在说一下反向代理,把前面的小明过程忘掉,看这个:做饭
。(此处敲黑板,主角是后厨)
- 大明去饭店吃饭(为什么是大明?小明回家了啊!),走到饭店里,坐下,叫服务员,点菜,服务员报菜
- 后厨的 小杨 拿到菜单,看了一下,需要肉、芹菜、西红柿、鸡蛋,肉和芹菜报给了 老王,说:老王,芹菜炒肉。
- 然后想到,后厨好像没有西红柿和鸡蛋了,让服务员对大明说,没有这两个菜了,然后大明说,那就一个芹菜炒肉吧。
- 炒好之后,端过来,大明吃饭,回家。
这里我们看下:
- 老王只管炒菜,就像一个OSS服务器(静态文件存储服务器),只做一件事情。当然肯定有很多个老王,也就是很多个不同种类的服务器。
- 小杨过滤掉了大明的西红柿鸡蛋,从某个意义上讲,其实充当了后厨的防火墙,没有菜你让我做!不做!就像服务器阻止了一些入侵和攻击。
- 在正常情况下,小杨会把不同的菜给不同的人炒,这里可以理解为负载均衡。
反向代理
的过程简单化可以理解为这些,在实际情况下,反向代理其实还有很多作用。
结尾
正向代理
和反向代理
两者区别在于:正向代理
代理的对象是客户端,反向代理
代理的是服务器。
最后点一下,vue
配置 proxyTable
做反向代理其实就是让你本地起的node
服务去访问公司里面的服务器接口,来达到请求和相应的。