代理配置分为 default、frontend、backend、listen 四个部分,大部分参数只能在特定的部分中使用;带有“(*)”标记的关键字可以使用“no”前缀进行可选反转,例如“no option contstats”。当选项默认启用并且必须对特定实例禁用时,这是有意义的。这样的选项也可以以“default”为前缀,以便恢复默认设置,而不管在以前的“defaults”部分中指定了什么。

1、acl

acl <aclname> <criterion> [flags] [operator] <value> ...

defaults

frontend

listen

backend

yes(!)

yes

yes

yes

定义访问控制列表;对于 defaults 部分,该指令只能在命名的 defaults 部分中使用,不能在匿名 defaults 部分中使用。

例子:

acl invalid_src  src          0.0.0.0/7 224.0.0.0/3
acl invalid_src  src_port     0:1023
acl local_dst    hdr(host) -i localhost

2、balance

balance <algorithm> [ <arguments> ]
balance url_param <param> [check_post]

defaults

frontend

listen

backend

yes

no

yes

yes

定义负载均衡算法,支持的算法有:

roundrobin: 根据权重轮询(动态)
static-rr: 根据权重轮询(静态)
leastconn: 请求发送到连接数最少的服务器(动态)
first: 请求发送到第一台可用服务器
hash: 根据配置的表达式计算hash以选择服务器(静态)
source: 根据客户端ip计算hash以选择服务器(默认静态),类似Nginx的ip_hash
uri: 根据uri计算hash以选择服务器(默认静态)
url_param: 根据请求参数计算hash以选择服务器(默认静态)
hdr(<name>): 根据请求头计算hash以选择服务器(默认静态)
random/random(<draws>):根据权重随机选择服务器(动态)
rdp-cookie/rdp-cookie(<name>): 根据rdp(远程桌面)协议的cookie计算hash以选择服务器(静态)

例子:

balance roundrobin
balance url_param userid
balance url_param session_id check_post 64
balance hdr(User-Agent)
balance hdr(host)
balance hdr(Host) use_domain_only
balance hash req.cookie(clientid)

3、bind

bind [<address>]:<port_range> [, ...] [param*]
bind /<path> [, ...] [param*]

defaults

frontend

listen

backend

no

yes

yes

no

定义监听地址。

例子:

listen http_proxy
    bind :80,:443
    bind 10.0.0.1:10080,10.0.0.1:10443

listen http_https_proxy
    bind :80
    bind :443 ssl crt /etc/haproxy/site.pem

4、cookie

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
              [ postonly ] [ preserve ] [ httponly ] [ secure ]
              [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
              [ dynamic ] [ attr <value> ]*

defaults

frontend

listen

backend

yes

no

yes

yes

设置 cookie,cookie 的值是在"server"语句中的"cookie"关键字后指定的值;如果给定的服务器没有声明 cookie,则不设置 cookie。

例子:

cookie JSESSIONID prefix
cookie SRV insert indirect nocache
cookie SRV insert postonly indirect
cookie SRV insert indirect nocache maxidle 30m maxlife 8h

5、default-server

default-server [param*]

defaults

frontend

listen

backend

yes

no

yes

yes

设置 server 的默认参数。

6、default_backend

default_backend <backend>

defaults

frontend

listen

backend

yes

yes

yes

no

设置默认的后端服务。

7、disabled

disabled

defaults

frontend

listen

backend

yes

yes

yes

yes

 禁用实例;可以在"defaults"部分添加"disabled"来同时禁用多个实例。

8、enabled

enabled

defaults

frontend

listen

backend

yes

yes

yes

yes

启用实例;当"defaults"设置为"disabled"时,可用该参数显式启用实例。

9、http-after-response

http-after-response <action> <options...> [ { if | unless } <condition> ]

defaults

frontend

listen

backend

yes(!)

yes

yes

yes

定义适用于第 7 层协议的规则;与 http-response 不同,这些规则适用于所有响应,不仅适用于服务器响应,还适用于 HAProxy 生成的所有响应。

例子:

http-after-response set-header Cache-Control "no-store,no-cache,private"
http-after-response set-header Pragma "no-cache"

10、http-check comment

http-check comment <string>

defaults

frontend

listen

backend

yes

no

yes

yes

 为 http-check 规则定义一个注释,如果检查失败,则在日志中记录。

11、http-check connect

http-check connect [default] [port <expr>] [addr <ip>] [send-proxy]
                   [via-socks4] [ssl] [sni <sni>] [alpn <alpn>] [linger]
                   [proto <name>] [comment <msg>]

defaults

frontend

listen

backend

yes

no

yes

yes

定义Http健康检查的协议、地址、端口等信息,可能涉及不同的端口或不同的服务器。

例子:

http-check connect port 8080

12、http-check disable-on-404

http-check disable-on-404

defaults

frontend

listen

backend

yes

no

yes

yes

当 HTTP 健康检查返回 404 响应时,启用维护模式。

13、http-check expect

http-check expect [min-recv <int>] [comment <msg>]
                  [ok-status <st>] [error-status <st>] [tout-status <st>]
                  [on-success <fmt>] [on-error <fmt>] [status-code <expr>]
                  [!] <match> <pattern>

defaults

frontend

listen

backend

yes

no

yes

yes

根据健康检查响应内容或状态码判断服务器的健康状况。

例子:

http-check expect status 200,201,300-310

http-check expect header name "set-cookie" value -m beg "sessid="

14、http-check send

http-check send [meth <method>] [{ uri <uri> | uri-lf <fmt> }>] [ver <version>]
                [hdr <name> <fmt>]* [{ body <string> | body-lf <fmt> }]
                [comment <msg>]

defaults

frontend

listen

backend

yes

no

yes

yes

HTTP 健康检查时,定义检查的方法、地址、请求头、请求体等信息。

例如:

http-check send meth GET uri / ver HTTP/1.1 hdr host 127.0.0.1

15、http-request

http-request <action> [options...] [ { if | unless } <condition> ]

defaults

frontend

listen

backend

yes(!)

yes

yes

yes

定义适用于请求的规则。

例如:

acl nagios src 192.168.129.3

http-request allow if nagios
http-request deny

16、http-response

http-response <action> <options...> [ { if | unless } <condition> ]

defaults

frontend

listen

backend

yes(!)

yes

yes

yes

定义适用于响应的规则。

例子:

http-response replace-value Cache-control ^public$ private

http-response set-status 503 reason "Slow Down"

17、log(*)

log global
log <address> [len <length>] [format <format>] [sample <ranges>:<sample_size>]
    <facility> [<level> [<minlevel>]]
no log

defaults

frontend

listen

backend

yes

yes

yes

yes

配置日志信息。

例如:

log global #使用全局的日志配置

18、maxconn

maxconn <conns>

defaults

frontend

listen

backend

yes

yes

yes

no

19、mode

mode { tcp|http }

defaults

frontend

listen

backend

yes

yes

yes

yes

设置协议。

20、option forwardfor(*)

option forwardfor [ except <network> ] [ header <name> ] [ if-none ]

defaults

frontend

listen

backend

yes

yes

yes

yes

在请求中添加 X-Forwarded-For 请求头。

21、option httpchk(*)

option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>

defaults

frontend

listen

backend

yes

no

yes

yes

启用 HTTP 健康检查。

例子:

option httpchk GET /

22、option httplog(*)

option httplog [ clf ]

defaults

frontend

listen

backend

yes

yes

yes

no

启用高级 HTTPS 日志,包含话状态和定时器等信息。

23、option httpslog(*)

option httpslog

defaults

frontend

listen

backend

yes

yes

yes

no

启用高级 TCP 日志,包含话状态和定时器等信息。

24、option tcpcheck(*)

option tcp-check

defaults

frontend

listen

backend

yes

no

yes

yes

启用 TCP 健康检查。

25、option tcpka(*)

option tcpka

defaults

frontend

listen

backend

yes

yes

yes

yes

发送 TCP 保活数据包。

26、option tcplog(*)

option tcplog

defaults

frontend

listen

backend

yes

yes

yes

no

启用高级 TCP 日志,包含话状态和定时器等信息。

27、retries

retries <value>

defaults

frontend

listen

backend

yes

no

yes

yes

在服务器故障后进行的重试次数。

28、server

server <name> <address>[:[port]] [param*]

defaults

frontend

listen

backend

no

no

yes

yes

定义后台服务。

例子:

server first  10.1.1.1:1080 cookie first  check inter 1000
server second 10.1.1.2:1080 cookie second check inter 1000

29、source

source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
source <addr>[:<port>] [interface <name>]

defaults

frontend

listen

backend

yes

no

yes

yes

设置哪些地址可以连接到服务器。

30、stats admin

stats admin { if | unless } <cond>

defaults

frontend

listen

backend

no

yes

yes

yes

启用统计页面的管理功能。

31、stats auth

stats auth <user>:<passwd>

defaults

frontend

listen

backend

yes

yes

yes

yes

设置统计页面的用户名密码。

32、stats enable

stats enable

defaults

frontend

listen

backend

yes

yes

yes

yes

- stats uri   : /haproxy?stats
- stats realm : "HAProxy Statistics"
- stats auth  : no authentication
- stats scope : no restriction

33、stats hide-version

stats hide-version

defaults

frontend

listen

backend

yes

yes

yes

yes

34、stats refresh

stats refresh <delay>

defaults

frontend

listen

backend

yes

yes

yes

yes

启用统计页面自动刷新并设置刷新间隔。

35、stats uri

stats uri <prefix>

defaults

frontend

listen

backend

yes

yes

yes

yes

设置统计页面访问的 url。

36、tcp-check comment

tcp-check comment <string>

defaults

frontend

listen

backend

yes

no

yes

yes

 为 tcp-check 规则定义一个注释,如果检查失败,则在日志中记录。

37、tcp-check connect

tcp-check connect [default] [port <expr>] [addr <ip>] [send-proxy]
                   [via-socks4] [ssl] [sni <sni>] [alpn <alpn>] [linger]
                   [proto <name>] [comment <msg>]

defaults

frontend

listen

backend

yes

no

yes

yes

定义 TCP 健康检查的地址、端口等信息。

38、tcp-check expect

tcp-check expect [min-recv <int>] [comment <msg>]
                  [ok-status <st>] [error-status <st>] [tout-status <st>]
                  [on-success <fmt>] [on-error <fmt>] [status-code <expr>]
                  [!] <match> <pattern>

defaults

frontend

listen

backend

yes

no

yes

yes

根据健康检查响应内容判断服务器的健康状况。

39、tcp-check send/tcp-check send-lf

tcp-check send <data> [comment <msg>]
tcp-check send-lf <fmt> [comment <msg>]

defaults

frontend

listen

backend

yes

no

yes

yes

定义 TCP 健康检查时发送的内容。

40、tcp-check send-binary/tcp-check send-binary-lf

tcp-check send-binary <hexstring> [comment <msg>]
tcp-check send-binary-lf <hexfmt> [comment <msg>]

defaults

frontend

listen

backend

yes

no

yes

yes

定义 TCP 健康检查时发送的二进制或十六进制字符串。

41、timeout check

timeout check <timeout>

defaults

frontend

listen

backend

yes

no

yes

yes

在连接检查中,对于已建立连接,额外的读取数据超时时间。

42、timeout client

timeout client <timeout>

defaults

frontend

listen

backend

yes

yes

yes

no

设置客户端超时时间。

43、timeout connect

timeout connect <timeout>

defaults

frontend

listen

backend

yes

no

yes

yes

设置连接后端服务的超时时间。

44、timeout http-request

timeout http-request <timeout>

defaults

frontend

listen

backend

yes

yes

yes

yes

设置完整的 HTTP 请求超时时间。

45、timeout server

timeout http-request <timeout>

defaults

frontend

listen

backend

yes

no

yes

yes

设置后端服务超时时间。

46、use_backend

use_backend <backend> [{if | unless} <condition>]

defaults

frontend

listen

backend

no

yes

yes

no

根据条件使用相应的后端配置。

47、use-server

use-server <server> if <condition>
use-server <server> unless <condition>

defaults

frontend

listen

backend

no

no

yes

yes

根据条件使用相应的后端服务。

 

 

参考:http://docs.haproxy.org/2.8/configuration.html#4