代理配置分为 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。