4.4.2 反向代理
反向代理是指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端的过程。此时,代理服务器对外就表现为一个服务器。例如,客户端访问http://zachary.sh.cn/demo,但是zachary.sh.cn上不存在demo页面,于是zachary.sh.cn反向代理到其他服务器读取到demo页面,然后将其作为自己的内容返回给用户,用户此时并不知道内容不是zachary.sh.cn的。
图4-5 Nginx正向代理流程图
反向代理服务器对于客户端而言是原始服务器,客户端向反向代理的命名空间中的内容发送普通请求,由反向代理服务器判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
反向代理访问zachary.sh.cn的过程,如图4-6所示。
图4-6 Nginx反向代理流程图
如图4-6所示,zachary.sh.cn服务器上没有demo相关页面,于是zachary.sh.cn服务器反向代理到Static服务器上并返回页面相关信息。工作流程如下:
1)用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址;
2)反向代理服务器接受用户的请求;
3)反向代理服务器在本地缓存中查找请求的内容,找到后直接把内容发送给用户;
4)如果本地缓存里没有用户所请求的信息内容,反向代理服务器会代替用户向源服务器请求同样的信息内容,并把信息内容发给用户。如果信息内容是在本地缓存中,则还会把它保存到缓存中。
代理服务器只用于代理内部网络对Internet外部网络的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的HTTP请求发送到代理服务器中。不支持外部网络对内部网络的连接请求,因为内部网络对外部网络是不可见的。一个代理服务器若能够代理外部网络上的主机访问内部网络时,这种代理服务的方式就称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就提高了Web服务器的安全性。