代理¶
正向代理¶
Forward Proxy
正向代理位于客户端和目标服务器之间,代表客户端向服务器发送请求。
客户端必须明确地配置其网络设置以使用代理服务器
- 客户端访问授权
- 突破 IP 访问限制,比如梯子
- 加速访问原始服务器的资源,网游加速器也属于特殊的代理
- 匿名代理,隐藏真实的客户端地址,比如肉鸡(黑客发起 DDos 攻击使用的傀儡机)
透明代理¶
透明代理对客户端和服务器来说是意识不到的,客户端不需要进行任何特别配置就能使用透明代理
- 内容过滤和监控:可以在不被用户察觉的情况下,对用户的网络使用进行监控或内容过滤。
- IP 地址转换:可以进行 NAT(网络地址转换),将内部地址转换为外部地址。
反向代理¶
Reverse Proxy
反向代理位于服务器端,代表服务器接收来自客户端的请求,然后按需处理。
- 负载均衡:将客户请求分发到多个服务器,以均衡负载并提高处理速度
- 提供安全保护:保护后端服务器不直接暴露在外网,防止攻击
- 抓包工具
- 动静分离
- 防火墙
- 实现跨域
- SSL 终端:可以在代理服务器上进行 SSL 加密和解密,减轻后端服务器的负担。
负载均衡¶
调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为负载均衡(Load Balancing)
负载均衡的两大职责:
- 均衡策略,即选择谁来处理用户请求,涉及各种均衡算法
- 将用户请求转发或者代理出去
无论在网关内部建立了多少级的负载均衡,从形式上来说都可以分为两种:
- 七层负载均衡,功能强,主要是做代理
- 四层负载均衡,性能高,主要是做转发
四层负载均衡其实是多种均衡器工作模式的统称,四层是指这些工作模式的共同特点是维持着同一个 TCP 连接,而不是说它只工作在第四层,实际主要都是工作在二层(数据链路层,改写 MAC 地址)和三层(网络层,改写 IP 地址)上,出于习惯和方便,统称为四层负载均衡。
从实现角度来看,可分为
- 硬件均衡器
- 软件均衡器两类
- 直接建设在操作系统内核的均衡器:LVS(Linux Virtual Server)
- 应用程序形式的均衡器:Nginx、HAProxy、KeepAlived等
应用层负载均衡¶
参考 Nginx 反向代理
网络层负载均衡¶
IP 隧道模式,新创建一个数据包,把原来数据包的 Headers 和 Payload 整体作为另一个新的数据包的 Payload,在这个新数据包的 Headers 中写入真实服务器的 IP 作为目标地址,然后把它发送出去。经过三层交换机的转发,真实服务器收到数据包后,必须在接收入口处设计一个针对性的拆包机制,把由负载均衡器自动添加的那层 Headers 扔掉,还原出原来的数据包来进行使用。这样,真实服务器就同样拿到了一个原本不是发给它(目标 IP 不是它)的数据包,达到了流量转发的目的
这种模式要求真实服务器必须支持 IP 隧道协议,而且必须保证所有的真实服务器与均衡器有着相同的虚拟 IP 地址,因为回复该数据包时,需要使用这个虚拟 IP 作为响应数据包的源地址,这样客户端收到这个数据包时才能正确解析。
NAT(Network Address Translation 网络地址转换) 模式,直接把数据包 Headers 中的目标地址改掉,修改后原本由用户发给均衡器的数据包,也会被三层交换机转发送到真实服务器的网卡上。这种模式比较简单,但在流量压力比较大的时候,负载均衡会带来较大的性能损失。
数据链路层负载均衡¶
数据链路层负载均衡所做的工作,是修改请求的数据帧中的 MAC 目标地址,让用户原本是发送给负载均衡器的请求的数据帧,被二层交换机根据新的 MAC 目标地址转发到服务器集群中对应的服务器的网卡上,这样真实服务器就获得了一个原本目标并不是发送给它的数据帧。
三角传输模式,也叫单臂模式,或者直接路由
使用这种负载均衡模式时,需要把真实物理服务器集群所有机器的虚拟 IP 地址配置成与负载均衡器的虚拟 IP 一样,这样经均衡器转发后的数据包就能在真实服务器中顺利地使用。