基本概念
代理顾名思义就是自己不去干一件事,让别人帮你去干。同样的,我们在网络上访问一些服务时也需要通过代理去完成,比如有天你想要看某某hub,但是你在China时看不到的,所以此时你便需要一个国外的代理服务器代理你去访问,然后将结果返回给你,然后你就可以嘿嘿嘿了。
在这里便是代理的一种应用,其实代理按照代理的方式一般可分为前向代理与反向代理
区别
-
前向代理
我们所见到的大部分情况都是前向代理,A客户端表面上与B服务器进行通信,但是事实上中间可能还经过了B服务器的转发,此时B服务器就起的是代理的作用,代理服务器是面向客户端的。刚开始我们所举的例子就属于前向代理范畴,通常用于访问某些服务受限时,起到了代理转发的作用。 -
反向代理
反向代理我们可能见的并不多,但是却起到至关重要的作用,例如著名的Nginx服务器通常就起的是反向代理的作用。当你准备网上购物时,在浏览器地址栏输入taobao.com,域名地址经过DNS服务器解析后便可访问到对应的网站,这只是一个宏观上的过程,事实上在此过程中浏览器拿到服务器ip地址后便向服务器发送http请求,此时接受请求的就是nginx服务器(也可能是其他服务器,例如Apache等),而nginx接收到请求后自己并不能处理请求,需要将请求转发到对应的web应用层进行处理,在进行完逻辑处理后,web应用层把请求返回给nginx,说:‘nginx,你可以把结果返回到客户端了’,nginx便乖乖的将结果返回到客户端,这便是反向代理在其中所起到的作用,隐匿了真正的业务逻辑层,提高了应用层安全性。主要功能:
- 对客户端隐藏服务器(集群)的IP地址
- 安全:作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等
- 为后端服务器(集群)统一提供加密和SSL加速(如SSL终端代理)
- 负载均衡,若服务器集群中有负荷较高者,反向代理通过URL重写,根据连线请求从负荷较低者获取与所需相同的资源或备援
- 对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务
对一些内容进行压缩,以节约带宽或为网络带宽不佳的网络提供服务 - 减速上传
- 为在私有网络下(如局域网)的服务器集群提供NAT穿透及外网发布服务
- 提供HTTP访问认证[2]
- 突破互联网封锁(不常用,因为反向代理与客户端之间的连线不一定是加密连线,非加密连线仍有遭内容审查进而遭封禁的风险;此外面对针对域名的关键字过滤、DNS缓存污染/投毒攻击乃至深度数据包检测也无能为力)
常见反向代理软件
- Nginx、Tengine
- Apache HTTP Server
- Varnish cache
- Squid Cache
- Traffic Server
- HAProxy
- YXORP
- Polipo
- Privoxy
- IIS
参考资料
[维基百科-反向代理](https://zh.m.wikipedia.org/zh-hans/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86)