从代理上网到反向代理

一、前言

本节以代理上网为例,谈论正向代理和反向代理,最终均统一于代理模式之内。

二、详细

2.1 复习代理模式

代理模式的产生是因为客户端对象Client无法直接访问到实体对象Entity,需要通过一个中间对象(或中间人)代表自己访问,这个中间对象就是代理对象Proxy。

传统的代理模式结构示意图:Client ----------- Proxy ---------- Entity

客户端Client通过代理对象Poxy访问实体Entity,此时Proxy就是代理,代理对象代表的是客户端,代表客户端Client访问是实体对象Entity。

接下来,从代理模式到代理上网!

2.2 客户端的正向代理(代理上网)

日常工作中,当我们需要访问互联网时,有两种方式。第一,当有公网ip,直接上网;第二,没有公网ip,使用代理上网。本节现在讨论的就是这种代理上网。

代理上网(来源于百度百科):不同的代理协议需要绑定在服务器不同的端口上,如HTTP代理通常绑定在3128、80、8080等端口上,FTP代理通常绑定在21端口上,Socks代理通常绑定在1080端口。当然这些端口都可以通过服务器端的配置更改的。

且看整体结构:

我的电脑现在使用的代理上网方式:

Client ----- 192.168.0.167:3128 ------- https://www.baidu.com

如图所示,这种使用代理上网的方式就是正向代理,将上面的代理模式应用到具体的代理上网的实例上,那么上面这个实体Entity就是目标网址TargetUrl(这里为https://www.baidu.com)

2.3 服务端的反向代理

百度官网的反向代理

Client ----- https://www.baidu.com (183.232.231.174)-----server1(183.232.231.174) server2 server3

2.4 将客户端的正向代理和服务端的反向代理统一起来

Client ----- 192.168.0.167:3126-------https://www.baidu.com(183.232.231.174)-----server1 server2 server3

我的电脑使用192.168.0.167:3128代理上网,因为我的电脑不能直接上网,所有使用192.168.0.167:3128代表我,由192.168.0.167:3128来代表我访问百度首页,192.168.0.167:3128代表的是我的电脑这个客户端对象Client,所以它(指192.168.0.167:3128)是正向代理。

百度使用183.232.231.174服务器为我提供服务,183.232.231.174(80端口可以省略)代表的是百度首页这个服务端对象server1,所以它(指183.232.231.174)是反向代理。

反向代理的负载均衡功能,因为百度作为最大的中文搜索引擎,有着数以万计的并发,不是一个服务器可以支撑的起来的,所以百度首页一定对应着若干个服务器集群,反向代理通过将一个确定的server被用户所使用,实现服务器集群的负载均衡。

附:反向代理是否属于代理模式的范畴?

答: 反向代理属于代理模式范畴,其实,设计模式正是如此优美,代理模式的核心只是一个代理对象,并不表示它是代表客户端对象还是服务器对象,当它代表客户端对象去访问服务端,此时它表示的是正向代理的意思,当它代表服务端对象响应客户端请求,此时它表示的是反向代理的意思。

所以,正向代理和反向代理都是代理模式,为代理模式所统一。

三、尾声

正向代理代理的对象是客户端,反向代理代理的对象是服务端,然后,正向代理和反向代理都统一于代理模式的范畴之内。

天天打码,天天进步!