读书笔记:正向、反向、透明代理

代理(Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

代理按照其部署的位置和工作方式,大致可以分为三类:正向代理,反向代理和透明代理。

正向代理

正向代理(Forward Proxy)是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

在正向代理的方式下,用户需要显示的配置其代理服务器。配置完成后,用户对其他网络服务的访问都先到达代理服务器,如果此时代理服务器缓存了用户想要的信息,且资源还没有失效,则代理服务器将直接把资源返回给用户,不再发请求到源服务器。如果代理服务器缓存中没有用户想要的资源,或者资源已经失效,则代理服务器将去源服务器请求,然后再将信息返回给用户,并在代理服务器中缓存。

上图演示了一个典型的公司网络使用正向代理的例子,内网用户想要访问外部的网络都必须通过代理服务器完成。

内网用户主机和代理服务器部署在同一个网络环境中,内网用户的IP地址为:192.168.10.101,代理服务器的IP地址为:192.168.10.1,用户想要访问的外网服务器IP地址为:172.16.10.200。通常,用户在使用代理前,需要为所使用的主机配置好代理服务器的IP地址和端口,这里是192.168.10.1和8080。

正向代理多用户中小企业网络环境,正向代理服务器作为企业的出口网关提供代理服务、内容缓存、Internet访问控制、安全认证等功能。

反向代理

反向代理(Backward Proxy)根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。与正向代理不同,正向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端作为代理使用,而不是客户端。

在反向代理方式下,用户不需要配置代理服务器地址。代理服务器的IP地址作为被访问域的服务IP地址,写入DNS记录。反向代理多用于大型ISP/ICP和运营商环境,对于运营商和ISP,反向代理可以实施透明的内容缓存,增加用户访问内容的速度和提高客户满意度。当反向代理服务器较多,网络规模较大时,需要部署负载均衡。

上图演示了一个反向代理的应用实例。代理服务器和应用服务器部署在同一个网络环境中,用户的IP地址为192.168.10.101,应用服务器IP地址为172.16.10.200,反向代理服务器IP地址为172.16.10.1。用户直接访问反向代理服务器的IP地址请求服务,反向代理服务器接收到用户的请求后,首先查看缓存中是否有用户想要的数据,如果有,则直接返回给用户;如果没有,则反向代理服务器会将用户的请求转发给应用服务器,并将应用服务器返回的数据反馈给用户,同时将数据缓存起来。

如果反向代理服务器的缓存命中率较高,将会大大减轻应用服务器的访问压力。对于应用服务器来说,反向代理服务器还提供了安全隔离作用。

透明代理

透明代理(Transparent Proxy)可以看作是通过网络设备或协议实现的正向代理工作模式,因而具备很多和正向代理相同的特点,多用于企业网环境和运营商环境。

在透明代理方式下,用户不需要配置代理服务器的地址,用户也几乎感受不到代理服务器的存在。用户发送给应用服务器的请求,首先会被透明代理服务器截获,透明代理服务器中会查看是否缓存了用户的请求数据,如果有,则直接返回给用户,如果没有则会向应用服务器请求,并将数据反馈给用户,同时将数据缓存起来。

实现透明代理一般有两种方案:

  1. 一种是通过路由器,用户的路由器需要支持WCCP(Web Cache Control Protocol)协议。路由器设置了WCCP后,会将指定的用户流量转发给透明代理服务器,有透明代理服务器提供服务;
  2. 另一种是通过4层交换机讲用户的流量转发给透明代理服务器。

上图演示了一个透明代理的应用实例。与正向代理的部署方式相似,用户服务器和透明代理服务器部署在同一个网络环境中,用户的服务器IP地址为:192.168.10.101,透明代理服务器的IP地址为:192.168.10.1,应用服务器的服务地址为:172.16.10.200。用户发往应用服务器的请求会首先被透明代理服务器拦截,透明代理服务器查看是否缓存了用户想要的数据,如果有则直接返回给用户,如果没有,则将用户的请求转发至应用服务器,接受返回的结果,并将结果返回给用户,同时缓存在透明代理服务器中。

透明代理的工作方式和正向代理很相似,发挥的作用也非常类似。与正向代理不同的是用户在使用透明代理时,不需要配置任何代理,使得用户几乎感觉不到代理服务器的存在。

总结

以上三种代理方式中,由于正向代理和透明代理往往和用户部署在同一个网络环境中,物理上距离用户更近,所以一旦缓存命中,往往能给用户“更快”的网络体验;而反向代理一般和应用服务器部署在一起,往往可以大幅度减轻应用服务器的负载压力。

日常应用中的翻墙利器,goAgent是正向代理的典型例子,而反向代理的经典案例代表则是Nginx,当然Nginx也可以作为正向代理使用,但其反向代理的是使用频率往往更高。