一、haproxy是什么?
haproxy是:
1、TCP代理:可以监听socket接受TCP连接,然后自己连接到server,haproxy将这些sockets attach到一起,使通信流量可双向流动。
2、HTTP反向代理(在HTTP专用术语中,称为gateway):haproxy自身表现得就像一个server,通过监听socket接受HTTP请求,
然后和后端服务器建立连接,通过连接将请求转发后端服务器。
3、SSL terminator/initiator / offloader:客户端-》haproxy的连接,以及haproxy-》server端的连接都可以使用SSL/TLS
4、TCP normalizer:因为连接在本地操作系统处终结,client和server端没有关联,所以不正常的traffic如invalid packets flag combinations window advertisements,sequence numbers,incomeplete connections(SYN floods)不会传递给server端。这种机制可以保护脆弱的TCP stacks免遭协议的攻击,也使得我们不比修改server端的TCP协议栈设置就可以优化与client的连接参数。
5、HTTP normalizer:haproxy 配置为HTTP模式时,只允许有效的完整的请求转发给后端。这样可以使得后端免遭protocol-based攻击。一些不规范的定义也被修改,以免在server端造成问题(eg:multiple-line headers,会被合并为一行)
6、HTTP修正工具:haproxy可以modify/fix/add/remove/rewrite URL及任何request or response header。
7、a content-based switch:可基于内容进行转发。可基于请求中的任何元素转发请求或连接。因此可基于一个端口处理多种协议(HTTP,HTTPS,ssh)。
8、a server load balancer:可在不同的方面对流量进行限制,保护server,使其不超负荷,基于内容调整traffic优先级,甚至可以通过通过marking packets将这些信息传递给下层以及网络组件。
9、防御DDoS攻击及service abuse:haproxy可为每个IP地址,URL,cookie等维护大量的统计信息,并对其进行检测,当发生服务滥用的情况,采取一定的措施如:slow down the offenders,block them,send them to outdated contents,etc
10、是network的诊断的一个观察节点:根据精确记录细节丰富的日志,对网络诊断很有帮助。
11、an HTTP compression offloader:可自行对响应进行压缩,而不是让server进行压缩,因此对于连接性能较差的client,或使用高延迟移动网络的client,减少页面加载时间。
二、haproxy不是什么
haproxy不是:
①、显式地HTTP代理,即不是浏览器用于访问Internet的代理。squid可用于做这种事情。haproxy可安装在squid的前端,提供负载均衡和高可用。
②、缓存代理:对于从服务器收到的内容,HAProxy 只能将其原样返回给 client,对 caching policy 不做任何干涉。对于这个任务, Varnish 是一个很好的选择。HAProxy 可安装在 Varnish 的前端提供 SSL offloading,以及可伸缩性(通过 smart load balancing)
③、a data scrubber: HAProxy 不能修改请求或响应的 body 部分。
④、a web server: HAProxy 在启动时,它将自己隔离在一个 chroot 环境中,并抛弃了自己的特权,所以一旦启动之后,它不会进行任何对文件系统的访问。所以 HAProxy 不能以 web server 的方式工作。可作 web server 的是 Apache 或 Nginx,HAProxy 可安装在其前端提供提供负载均衡和高可用。
⑤、a packet-based load balancer:基于 packet 的负载均衡调度器。HAProxy 不会看见 IP packet 或 UDP datagram,不能进行 NAT 转换,或者 less DSR。这些是下层的工作,比如 LVS 就做得很好,LVS 对 HAProxy 是完美的补充。