代理( Proxy)其功能犹如它的名字所示:代替who来处理what。
常见的代理分两种,正向代理和反向代理。不管哪种代理,它们都位于客户端和服务器之间,将我们传统的 客户端 <-> 服务器通信变成了 客户端 <-> 代理 <-> 服务器 通信。
正向代理
正向代理用于代理客户端,此时在服务器看来,代理就是客户端,服务器不知道真正客户端的存在。
一般情况下,代理和客户端位于一个内网中,(客户端 <-> 代理) <-> 服务器。客户端不需要直接将请求发给服务器,而是发给代理,由代理代为请求服务器并返回结果。
看起来似乎是多了一道手续,没什么好处,但是实际上,正向代理有很多用处:
突破限制。比如有五台服务器,位于一个内网中,但是只有一台可以访问公网。那么此时通过配置这台服务器作为正向代理,其他四台服务器便也都可以访问公网,这个场景在云服务器中很常见;再比如我们的科学上网软件,实际上也是一个正向代理。由于我们的计算机无法直接访问敏感网站,但是代理服务器可以,而我们的计算机访问代理服务器又是没问题的。因此,通过使用代理服务器,我们便可以间接访问到我们感兴趣的网站。流量控制与流量统计。由于所有的流量都经过代理,通过配置代理,我们可以对流量进行任意控制。比如,不允许访问淘宝等,很多公司会对员工的网络访问进行限制,便是通过正向代理实现。除了控制之外,使用正向代理也可以对流量进行统计。通过解析代理的访问日志,使用一些类似 awstats 的工具,便可以得到流量的详细统计信息。提升性能。正向代理可以缓存经常被访问的网站,从而大幅提升访问速度。
反向代理
反向代理用于代理服务器,此时在客户端看来,代理就是服务器,客户端不知道真正服务器的存在。
一般情况下,代理和服务器位于一个内网中,客户端 <-> (代理 <-> 服务器)。服务器不需要直接和客户端沟通,而是通过代理,由代理接收客户端的请求,再发送给服务器。
反向代理有如下几个用处:
突破限制。比如内网中的某个服务器,如果想要在公网访问,我们可以配置内网中拥有公网 IP 的机器作为反向代理,从而实现对内网服务的访问。负载均衡。我们可以部署多台服务器,配置代理将请求转发给不同的服务器。这里有很多算法可以使用,比如最简单的轮流转发 (Round Robin)。这样,当负载增大的时候,客户端无需做任何修改,服务端通过简单的增加服务器便可以应对。负载均衡的另一个好处是可以实现容灾容错。如果某台服务器宕机了,代理服务器会将请求转发到其他服务器上,客户端不会受到任何影响。访问加速。对于某些大型服务,他们的服务器遍布各地,通过使用反向代理,当请求到来时,代理可以将请求转发给最近的服务器,从而让用户在最短时间内获得响应,这一点其实和 CDN 的工作方式是一样的。