代理

代理服务器

服务本身不产生内容,而是处于中间位置,转发上下游的请求和响应,具有双重身份。当面向下游的用户的时候,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器的时候,又表现为客户端,代表客户端发送请求。

为什么要有代理?代理能干什么、带来什么好处?

“计算机领域里的任何问题,都可以引入一个中间层来解决” TCP/IP协议栈是这样,代理也是这样。
代理处在HTTP通信的中间位置,对上屏蔽真实的客户端,对下屏蔽真实的服务器—–欺上瞒下
在这个中间的小天地里,可以做很多有趣的事情。

负载均衡

代理最基本的一个功能就是负载均衡,因为在面向客户端时屏蔽了源服务器,客户端看到的只是代理服务器,源服务器究竟有多少台、是哪些ip地址都不知道,于是代理服务器就可以掌握请求分发的大权,决定由后面的哪台服务器来响应请求。

轮询、一致性哈希等代理中常用的负载均衡算法的目标都是尽量把外部的流量合理的分散到多台源服务器
,提高系统的整体资源利用率和性能。

除了负载均衡,代理服务器还可以执行更多的功能:

  • 健康检查; 使用心跳机制监控后端服务器,发现有故障就及时踢出集群,保证服务高可用
  • 安全防护: 保护被代理的后端服务器,限制ip地址或流量,抵御网络攻击和过载
  • 加密卸载: 对外网使用ssl/tls加密通信认证,而在安全的内网不加密,消除加解密成本
  • 数据过滤: 拦截上下行的数据,任意指定策略修改请求或者响应
  • 内容缓存: 暂存、复用服务器响应

一个可能的缺点

代理有很多的好处,但是它欺上瞒下的特点,隐藏了真实的客户端和服务器,如果双方希望获取
到这些“真实”的原始信息该怎么办呢?

首先,代理服务器需要使用字段Via标明代理的身份。

Via是一个通用的字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把
自身的信息追加到字段的末尾,就像是经手人盖了一个章。如果通信线路中有很多中间代理,就会在
Via里形成一个链表,这样就可以知道报文究竟走过了多少个代理。