Haproxy 1.5 配置手册

关于HTTP协议

当Haproxy运行在HTTP模式下时,请求和响应均经过haproxy分析和处理,几乎可以构建匹配规则来处理所有内容。

然而,重要的是要理解HTTP的request和response,以及Haproxy如何分解它们,才能更容易地编写正确的规则和调试配置。

HTTP事务模型

HTTP协议是事务驱动模式,这意味着每个请求有且只有一个响应。传统上,从客户端与服务端建立一个TCP连接,客户端通过连接发起一个请求,服务端作出响应和关闭连接。一个新的请求会再创建一个新的连接。

[CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...

这种模式叫做HTTP close模式,有多少HTTP事务就有多少个连接。因为服务端在回应后断会断开连接,客户端不需要知道内容长度。

由于事务协议的性质,可以改进它,避免在两个事务之间断开连接。在这种模式下,服务端在协议头中增加"Content-length"来表示响应的内容长度,以便客户端无限期等待。

[CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...

它的优点是减少事务之间的延迟时间和服务端的开销,这会比HTTP close模式更好,但不总是这样,因为客户端经常会限制其并发连接为一个较小的值。

还有一个改进通信效率模式是流水线模式。它仍然使用keep-alive,但客户端不再等待前一个响应结束才发起第二个请求,这在需要获取大量的图片来组成一个页面非常适用。

[CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...

因为同时发起多个请求,网络延迟大大降低,对提高页面的加载速度有很大帮助。

很多HTTP代理不支持pipelining模式,因为没有办法正确地把响应和请求关联上。因此,要求服务器使用完全相同的顺序来回复收到的请求。

默认情况下Haproxy持久连接处于Keep-alive模式:为每个连接处理各自的请求和响应,响应结束后连接进入空闲状态,并用于处理下一个请求。

HTTP Request

Line     Contents
number
 1       GET /serv/login.php?lang=en&profile=2 HTTP/1.1
 2       Host: www.mydomain.com
 3       User-agent: my small browser
 4       Accept: image/jpeg, image/gif
 5       Accept: image/png

略。

HTTP Response

Line     Contents
number
 1       HTTP/1.1 200 OK
 2       Content-length: 350
 3       Content-Type: text/html

略。

配置Haproxy

配置文件格式

HAProxy参数的配置过程包括三个主要来源:

配置文件中,以配置项关键字开始,后跟一个或几个参数,多个参数之间用空格分隔。

如果参数中包含空格或反斜杠(\),必须使用反斜杠(\)进行转义。

时间格式

有些参数包括时间,如timeout。时间通常使用ms单位(特别说明的除外),也可以使用其它单位的数值。支持的时间单位包括:

配置范例

Global全局参数