正向代理、反向代理、透明代理

蓝咒 提交于 2019-12-07 11:46:32

正向代理

这个想必大家都比较清楚了,翻墙就是正向代理的经典例子。通俗的说就是:

A用户无法访问twitter,但是我能访问B服务器,而B服务器可以访问twitter。于是我访问B服务器,告诉它”嗨,伙计,我要访问twitter“,B服务器收到请求后,去访问twitter,twitter把响应信息返回给B服务器,B服务器再把响应信息返回给A。这样,通过B代理服务器,就实现了翻墙。 所以说,正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理服务器向原始服务器转发请求并将获得的内容返回给客户端。客户端必须要进行一些设置才能使用正向代理。[注意,这里面指定目标、客户端必须设置是正向代理和反向代理的区别之处]

反向代理

反向代理很大情况是为了保护原始服务器。

比如现在服务器A域名为www.sina.com.cn,黑客H通过技术手段想去攻击,那服务器A可能就会挂掉。但如果我在H和A之间搞一个代理服务器C冒充原始服务器,那么,对黑客而言,C服务器就是A服务器。即使他真的把C服务器搞挂了,对A服务器也不会有影响。实现起来也很简单,就是在服务器A设置一个防火墙,保证只有C服务器才能访问A。其他任何请求都会被拒绝。这样就完成了A服务器的隐藏。服务器C实现的功能就叫做反向代理。 所以说,反向代理是和正向代理相反,对于客户端而言,它就是原始服务器。并且客户端不需要进行任何特别的设置,客户端向反向代理的发送普通请求,接着反向代理将判断向何处(原始服务器)转发请求,并将获得的内容返回给客户端,就像这些内容就是代理服务器自己的一样。

区别是神马?

那可能有人会问,正向代理和反向代理都是在H和A之间加一个代理,本质来说都是一样的呀。不管A能不能访问,我都可以搞个代理呀。嗯,这个问题确实应该搞清楚。

1. 从用途上来区分:

  • 正向代理:正向代理用途是为了在防火墙内的局域网提供访问internet的途径。另外还可以使用缓冲特性减少网络使用率

  • 反向代理:反向代理的用途是将防火墙后面的服务器提供给internet用户访问。同时还可以完成诸如负载均衡等功能

2. 从安全性来讲:

  • 正向代理:正向代理允许客户端通过它访问任意网站并且隐蔽客户端自身,因此你必须采取安全措施来确保仅为经过授权的客户端提供服务

  • 反向代理:对外是透明的,访问者并不知道自己访问的是代理。对访问者而言,他以为访问的就是原始服务器

3. 反向代理例子1

假设一种情况,我现在有一个原始服务器A。它没有域名,只有IP地址123.123.123.123,那么我访问只能通过IP地址了。作为一个WEB应用让用户使用,IP地址是没有任何用户体验而言的。所以我在A服务器和用户之间搞了一个B服务器,B服务器有域名,叫做www.sina.com.cn吧。现在用户想搜个东西,于是在表单中提交了一个query,请求URL就是http://www.sina.com.cn/query=jay,然后就出来了相应的界面。于是用户以为它访问的就是原始服务器。但实际情况是如何呢?

首先,B服务器只有一个域名,它上面没有query服务 query服务是A服务器运行的程序 所以整个访问过程对用户是透明的:

这个过程是反向代理的一个经典用法,正向代理就没法完成。因为正向代理服务器根本就没有query=jay这个服务。而反向代理因为是作为原始服务器的伪装,所以用户以为它访问的就是原始服务器。

4. 反向代理例子2

还有一种情况就是负载均衡,比如现在我服务假设在3个国家:中国、美国、瑞典,那么如果是正向代理的话,它是以能访问为目的,所以可能中国的用户正向代理去请求了美国的服务器,那么响应速度就会很慢。当然了,正向代理也可以判断请求来源,去请求最适合的服务器,但这不是它的强项。

那么,使用反向代理的话,反向代理可以提供强大的负载均衡。比如我们项目目前使用的是Nginx实现的反向代理和负载均衡,Nginx给根据请求的来源判断将请求发送给哪个机房,同时使用一致性哈希使这个机房的每台机器访问量大致相同,防止出现某个机房的几台机器请求量特别大,另外几台几乎没有请求的情况出现。

5. 反向代理例子3

假如我的前端代码都是在本地开发,我怎么知道我的代码在线上运行是什么样子呢?你说在本地搭建一个网站?那假如公司网站非常非常大(比如一个视频网站),一个机房的机器都放不下,更别说我一台PC了。

这个时候就可以利用反向代理。我先把公司网址例如www.sina.com.cn改HOST方式指向127.0.0.1 也就是自己机器。然后在自己机器上装一个Apache,并且设置反向代理整站到线上服务器,但排除了目录test。

于是我输入http://www.sina.com.cn/sport/的时候,请求发送到本机的apache,本机的apache去线上获取内容吐给我,就像他自己的一样。而我输入http://www.sina.com.cn/test/的时候,请求发送到本机的apache,apache发现这是个排除的目录,于是找本机上对应的目录文件(开发目录)吐给我。这样子就实现了完全模拟线上环境的开发模式。

透明代理

透明代理的使用场景就是公司限制网络的访问。客户端根本不知道代理的存在,它改编你的request,并会传送真实IP。

比如为了工作效率或者安全,A公司屏蔽了QQ软件的使用。A公司的员工接上了网络,但发现无法使用qq。这就是透明代理捣的鬼。公司在内网和外网的中间插入一个透明代理,这个代理会根据规则抓取请求内容,遇到qq的请求我就把这个请求给屏蔽掉,这样就完成了透明屏蔽。当然了,如果你明白原理,就可以自己搞个正向代理来绕过公司的屏蔽。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!