backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server;
check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:
inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;
rise <count>:设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
fall <count>:确认server从正常状态转换为不可用状态需要检查的次数;
cookie <value>:为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;
maxconn <maxconn>:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;
maxqueue <maxqueue>:设定请求队列的最大长度;
observe <mode>:通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于http代理场景;
redir <prefix>:启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应;需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以免造成循环;例如:
server srv1 172.16.100.6:80 redir check
weight <weight>:权重,默认为1,最大值为256,0表示不参与负载均衡;
定义健康检查方式可以使用option:
option httpchk
option httpchk <uri>
option httpchk <method> <uri>
例如:
backend https_relay
mode tcp
option httpchk OPTIONS * HTTP/1.1\r\nHost:\
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
基于浏览器cookie实现session sticky:
要点:
(1) 每个server有自己惟一的cookie标识;
(2) 在backend中定义为用户请求调度完成后操纵其cookie
backend websrvs
balance roundrobin
cookie SERVERID insert nocache indirect
server web1 192.168.20.7:80 check cookie websrv1
server web2 192.168.20.8:80 check cookie websrv2
测试:注意到cookie头部的websrv1关键字了么?
开启统计页面:
listen statistics
bind *:9090
stats enable
stats hide-version
#stats scope .
stats uri /haproxyadmin?stats
stats realm "HAPorxy\ Statistics"
stats auth admin:mageedu
stats admin if TRUE
向日志中记录额外信息:
capture request header
capture response header
当mode为http时,记录丰富的日志信息:
option httplog----默认是开启的
错误页面重定向:
errorfile: 使用haproxy主机本地文件进行响应;
errorloc, errorloc302: 使用指定的url进行响应,响应状态码为302;不适用于GET以外的其它请求方法;
errorloc303:返回303状态码;
添加请求或响应报文首部:
reqadd
rspadd
frontend main
bind *:80
bind *:8080
rspadd Via:\ node1.lee.com
default_backend websrvs
出现了Via:
动静分离的示例:
frontend main
bind *:80
bind *:8080
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend appsrvs
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance roundrobin
server static1 192.168.20.7 check
server static2 192.168.20.8 check
backend appsrvs
balance roundrobin
option forwardfor except 127.0.0.1 header X-Client
option httpchk
cookie SERVERID insert indirect nocache
server web1 192.168.20.7:80 check cookie web1
server web2 192.168.20.8:80 check cookie web2