什么是代理,一个代理过程涉及三个角色: 代理对象、被代理对象、目标对象,三个角色关系如下:
被代理对象委托代理对象访问目标对象
以打官司为例,张三想要打官司于是请了李四律师帮忙打官司,那么张三就是被代理对象,不用亲自打官司,而是委托代理对象李四律师;李四律师就是代理对象,代理张三打官司事务;而目标对象就是打官司。
正向代理
假设我们需要访问国外的网站比如Google,此时可能通过国内的浏览器是如何直接访问Google的,此时假设有一台服务器可以访问Google,并且国内的客户端可以访问这台服务器,那么就可以将这台服务器叫做正向代理服务器。
国内客户端将请求发送给代理服务器,代理服务器再将请求发送给Google,此时就完成了一次正向代理的过程。
如下图示:
可以发现正向代理有几个特点:
1、客户端明确知道要访问的具体服务器地址
2、目标服务器不知道客户端信息,只知道所有请求都是由代理服务器发送过来的。
3、客户端需要配置代理服务器信息
所以正向代理代表的是客户端,代客户端发送请求。客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回给客户端。
正向代理的用途
1、访问原本无法访问或不想直接访问的资源,比如访问国外资源等;
2、缓存,代理服务器可以将目标服务器的资源进行缓存,这样客户端可以直接从代理服务器获取缓存数据;
3、管控客户端行为,记录客户端请求日志等;
反向代理
以淘宝为例,为了应付高并发请求,淘宝服务器会采用集群的方式部署服务器,这样客户端就不知道将请求发送到哪一台服务器,假设有一台服务器可以根据规则来将客户端请求进行转发,那么就可以将这台服务器叫做反向代理服务器。
客户端将请求发送给代理服务器,服务器根据转发策略,选取一台服务器进行转发,这样就完成了一个反向代理的过程。
如下图示:
可以发现反向代理有几个特点:
1、客户端并不知道要访问的具体服务器地址,具体服务器地址是由代理服务器选择的。
2、客户端并不需要配置代理服务器信息,代理服务器对于客户端而言是透明的
3、目标服务器是知道请求是由哪个客户端请求过来的
所以反向代理代表的是服务器,代服务器接收请求,客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回个客户端。
反向代理的用途
1、保护服务器安全,服务器内网部署即可,而只需要将代理服务器暴露到外网
2、负载均衡,通过代理服务器来根据负载均衡策略维护服务器的请求数
总结
正向代理代理的是客户端发送请求,客户端和代理服务器处于同一个网络环境,隐藏了客户端信息
正向代理主要作用是访问不可访问的资源和统一管控客户端请求
反向代理代理的是服务器接收请求,服务器和代理服务器处于同一个网络环境,隐藏了服务器信息
反向代理主要作用是保护内网服务器和负载路由转发
本质上正向代理和反向代理都是处于客户端和服务器之间的角色,客户端都是将请求给代理,代理将请求转发给服务器的过程。而实际应用场景中,往往可能是同时存在正向代理和反向代理的,如下图示: