1、什么是反向代理?
客户端向一个服务器A提交请求后,服务器A偷偷地去服务器B上获取资源,并返回给客户端。客户端天真地以为数据是服务器A给他的。在这过程中,服务器A称为“反向代理服务器”,服务器B称为反向代理服务器的“后端服务器”。
2、反向代理有两种用法:
(1)一种是为多个网站的Web服务器提供代理,这些网站的域名都指向反向代理服务器,对这些网站的请求全都发给了反向代理,由反向代理服务器转发HTTP请求给相应网站的Web服务器。
(2)一种是为一个网站的Web服务器集群提供代理,反向代理作为负载均衡器决定具体哪个Web服务器接收请求。
反向代理总是位于Web服务器的前端,Internet上的用户对Web服务器的连接要先经过反向代理,然后由反向代理决定哪个Web服务器处理用户请求,并将请求路由给相应的Web服务器。对静态内容可以在反向代理上缓存,这样就不用再向Web服务器路由了。
3、除了缓存和负载均衡,反向代理还能提供如下功能:
(1)安全:反向代理隔离了用户和Web服务器,用户很难针对特定的服务器发动攻击;
(2)数据加密/SSL加速: 某些Web服务器可能不具有SSL加密功能,但是具有加密功能的反向代理服务器可以为Web服务器提供数据加密,而且装备了SSL加速硬件的反向代理服务器还能为Web应用提供了高速的加密通道;
(3)压缩:代理服务器能压缩经过的数据以节省带宽
详细过程:
一般情况下当浏览器有请求时会直接发送这些请求到源服务器。当Server1工作在反向代理模式,它会在这些请求到达源服务器之前就拦截它们。典型的用法是将源服务器的DNS入口(主机名)解析成Server1的IP地址。当Server1被配置为源服务器,浏览器会和Server1连接而非源站。为了避免DNS冲突,源站的主机名和外在DNS主机名必须不同。
1. 客户端浏览器向名为www.server1.com主机发起一个http请求。Server1源服务器的角色接收这个请求。
2. Server1在remap.conf文件中定位映射规则并重新映射这个请求到一个指定的源站(realhost.com)
3. Server1建立一个和源站的HTTP连接。
4.如果请求在缓存命中而且内容是有效的,Server1直接从缓存中向客户端发送被请求的对象。否则,Server1从源站获取被请求的对象资源,发送给客户端,同时在缓存中保存一份该对象的拷贝。
正向代理
正向代理(forward proxy) ,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。
4、区别
两者最直观的区别是在用户的角度。“正向代理”是用户使用的技术。用户首先是知道自己要访问的目标服务器是谁,但由于某种原因无法直接访问该目标服务器,因此选择使用正向代理服务器帮忙转发请求。
而“反向代理”是服务器使用的技术。用户向服务器发送请求后,服务器在用户不知情的情况下去其他服务器上获取资源并返回给用户。