balance [ ] balance url_param [check_post []]
根据cookie(name)来锁定并哈希每一次TCP请求。
bind [<address>]:<port_range> [, …] bind [<address>]:<port_range> [, …] interface <interface>
mode { tcp|http|health }
hash-type <method>
hash表是一个包含了所有在线服务器的静态数组。其hash值将会非常平滑,会将权重考虑在列,但其为静态方法,对在线服务器的权重进行调整将不会生效,这意味着其不支持慢速启动。
此外,挑选服务器是根据其在数组中的位置进行的,因此,当一台服务器宕机或添加了一台新的服务器时,大多数连接将会被重新派发至一个与此前不同的服务器上,对于缓存服务器的工作场景来说,此方法不甚适用。
“一致性哈希算法”,hash表是一个由各服务器填充而成的树状结构,将服务器散列在hash环上;基于hash键在hash树中查找相应的服务器时,最近的服务器将被选中。
此方法是动态的,支持在运行时修改服务器权重,因此兼容慢速启动的特性。添加一个新的服务器时,仅会对一小部分请求产生影响,因此,尤其适用于后端服务器为cache的场景。不过,此算法不甚平滑,派发至各服务器的请求未必能达到理想的均衡效果,因此,可能需要不时的调整服务器的权重以获得更好的均衡性。
log global log <address> <facility> [<level> [<minlevel>]]
global:当前实例的日志系统参数同”global”段中的定义时,将使用此格式;每个实例仅能定义一次"log global"语句,且其没有任何额外参数;
定义日志发往的位置
1可以为< IPv4_address:PORT> port:为UDP协议端口,默认为514
为Unix套接字文件路径,但需要留心chroot应用及用户的读写权限;
可以为syslog系统的标准facility之一
maxconn <conns>
default_backend <backend>
指定使用的后端的名称;
use_backend dynamic if url_dyn use_backend static if url_css url_img extension_img default_backend dynamic
server <name> <address>[:port] [param*]
启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如下所示
某离线的server从离线状态转换至正常状态需要成功检查的次数;
确认server从正常状态转换为不可用状态需要检查的次数;
为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;
haproxy 有n个进程,每个支持m个连接,后端有x个服务器,每个最大支持y个连接,则 nm <= xy,如果后端服务器支持排队,则nm <= x(y+z),z为每个服务器的排队队列
设定请求队列的最大长度;
启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应;
需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以免造成循环;例如:
server srv1 172.16.100.6:80 redir http://imageserver.feiyu.com check
option httpchk
option httpchk backend https_relay mode tcp option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.feiyu.com server apache1 192.168.1.1:443 check port 80
server first 172.16.100.7:1080 cookie first check inter 1000 server second 172.16.100.8:1080 cookie second check inter 1000
capture request header <name> len <length>
capture response header <name> len <length>
启用基于程序编译时默认设置的统计报告
不能用于"frontend"区段。
默认配置如下
- stats uri : /haproxy?stats - stats realm : "HAProxy Statistics" - stats auth : no authentication - stats scope : no restriction
下面给出一个配置案例
backend public_www server websrv1 172.16.100.11:80 stats enable stats hide-version stats scope . stats uri /haproxyadmin?stats stats realm Haproxy\ Statistics stats auth statsadmin:password stats auth statsmaster:password
stats realm <realm>
stats scope { <name> | "." }
stats auth <user>:<passwd>
授权进行访问的用户名;
此用户的访问密码,明文格式;
stats admin { if | unless } <cond>
目前来说,POST请求方法被限制于仅能使用缓冲区减去保留部分之外的空间,因此,服务器列表不能过长,否则,此请求将无法正常工作。因此,建议一次仅调整少数几个服务器。
下面是两个案例
# 第1个:限制了仅能在本机打开报告页面时启用管理级别功能 backend stats_localhost stats enable stats admin if LOCALHOST # 第2个:定义了仅允许通过认证的用户使用管理级别功能。 backend stats_auth stats enable stats auth haproxyadmin:password stats admin if TRUE
option httplog [ clf ]
启用日志记录HTTP请求、会话状态和计时器的功能。
使用CLF格式来代替HAProxy默认的HTTP格式,通常在使用仅支持CLF格式的特定日志分析器时才需要使用此格式。
默认情况下,日志输入格式非常简陋,因为其仅包括源地址、目标地址和实例名称,而"option httplog"参数将会使得日志格式变得丰富许多,其通常包括
option logasap no option logasap
启用或禁用提前将HTTP请求记入日志
不能用于"backend"区段。
默认情况下,HTTP请求是在请求结束时进行记录以便能将其整体传输时长和字节数记入日志,由此,传较大的对象时,其记入日志的时长可能会略有延迟。"option logasap"参数能够在服务器发送complete首部时即时记录日志,只不过,此时将不记录整体传输时长和字节数。此情形下,捕获"Content-Length"响应首部来记录传输的字节数是一个较好选择。下面是一个例子。
listen http_proxy 0.0.0.0:80 mode http option httplog option logasap log 172.16.100.9 local2
option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
允许在发往服务器的请求首部中插入"X-Forwarded-For"首部。
仅在此首部不存在时才将其添加至请求报文问道中。
HAProxy工作于反向代理模式,其发往服务器的请求中的客户端IP均为HAProxy主机的地址而非真正客户端的地址,这会使得服务器端的日志信息记录不了真正的请求来源,"X-Forwarded-For"首部则可用于解决此问题。
HAProxy可以向每个发往服务器的请求上添加此首部,并以客户端IP为其value。
HAProxy工作于隧道模式,其仅检查每一个连接的第一个请求,因此,仅第一个请求报文被附加此首部。如果想为每一个请求都附加此首部,请确保同时使用以下option
frontend www mode http option forwardfor except 127.0.0.1
errorfile <code> <file>
指定用于响应的页面文件;
errorfile 400 /etc/haproxy/errorpages/400badreq.http errorfile 403 /etc/haproxy/errorpages/403forbid.http errorfile 503 /etc/haproxy/errorpages/503sorry.http
errorloc <code> <url> errorloc302 <code> <url>
errorloc303 <code> <url>
backend webserver server 172.16.100.6 172.16.100.6:80 check maxconn 3000 cookie srv01 server 172.16.100.7 172.16.100.7:80 check maxconn 3000 cookie srv02 errorloc 403 /etc/haproxy/errorpages/sorry.htm errorloc303 503 /etc/haproxy/errorpages/sorry.htm