~~~
frontend http_80_in
bind 0.0.0.0:80
mode http #http 的7层模式
log global #应用全局的日志设置
option httplog #启用http的log
option httpclose
option forwardfor
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8
default_backend appserver #设置请求默认转发的后端服务池,
~~~
说明:
1、bind
bind [<address>]:<port_range> [, ...] [param*]
该指令还可以用在listen段中
案例:
bind :80,:443
bind 10.0.0.1:10080,10.0.0.1:10443
bind *:443 ssl crt /opt/CA/boke.51yuki.cn.pem
redirect scheme https if !{ ssl_fc } (全站https)
2、 capture request header
capture request header <name> len <length>
该指令用来捕获请求头的值,并记录到日志里
案例:
capture request header Host len 15
capture request header X-Forwarded-For len 15
capture request header Referer len 15
3、 capture response header
该指令用来捕获响应头的值
案例:
capture response header Content-length len 9
capture response header Location len 15
4、default_backend
指定使用的默认后端backend
~~~
backend blog_server_backend
balance uri
hash-type consistent
option redispatch
mode http
cookie BLOGSID insert nocache
option httpchk HEAD /test3.html HTTP/1.1\r\nHost:\ boke.51yuki.cn
server blog1 192.168.20.132:8082 check inter 3000 rise 3 fall 3 weight 2 cookie blog1 maxconn 2000
server blog2 192.168.20.133:8082 check inter 3000 rise 3 fall 3 weight 1 cookie blog2 maxconn 2000
~~~
说明:
1、balance
用来定义负载均衡算法
* roundrobin 基于权重进行的轮叫,在服务器的性能分布经较均匀时这是一种最公平的,最合量的算法
* static-rr 基于权重的轮叫,此算法是静态的,在运行时调整其服务权重不会生效
* source 基于请求源IP的算法,此算法对请求的源IP时行hash运算,然后将结果与后端服务器的权理总数相除后转发至某台匹配的后端服务器,这种方法可以使用一个客户端IP的请求始终转发到特定的后端服务器。
* uri 此算法对部分(?号之前)或整个URL进行hash运算,再经过与服务器的总权重要除,最后转发到某台匹配的后端服务器上
* uri_param 此算法会椐据URL路径中的参数时行转发,同一个用户的请求始终分发到同一台机器上,如果有多个参数,需要指定用哪个参数
* hdr 此算法根据httpd的header头的字段进行转发(比如User-Agent、Host等),如果指定的httpd头名称不存在,则使用roundrobin算法进行策略转发。
2、cookie
cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
[ postonly ] [ preserve ] [ httponly ] [ secure ]
[ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
[ dynamic ]
[ rewrite | insert | prefix ] /*三者互斥,只能选一*/ (insert最为常用)
rewrite //表示cookie由服务器生成并且haproxy会在其值中注入该服务器的标识符;此关键字不能在HTTP隧道模式下工作。
insert //表示如果客户端没有cookie信息且有权限访问服务器时,持久性cookie必须通过haproxy穿插在服务器的响应报文中。当服务器收到相同名称的cookie并且没有“preserve(保存)”选项时,将会移除之前已存的cookie信息。因此,insert可视作"rewrite"的升级版。cookie信息仅仅作为会话cookie且不会存到客户端的磁盘上。默认除非加了“indirect(间接)”选项,否则服务器端会看到客户端端发送的cookie信息。由于缓存的影响,最好加上“nocache”或“postonly”选项。
prefix //表示不依赖专用的cookie做持久性,而是依赖现成的。用在某些特殊的场景,如客户端不支持一个以上的cookie和应用程序需求它。每当服务器建立一个名为<name>的cookie时,它将以服务器的标识符和分隔符为前缀。来自于客户端的请求报文中的前缀将会被删除以便服务器端能识别出它所发出的cookie,由于请求和响应报文都被修改过,所以此模式不能工作在隧道模式中。且不能和“indirect”共用,否则服务器端更新的cookie将不会被发到客户端.
案例:
cookie SRV insert indirect nocache
cookie SRV insert postonly indirect
3、server
server <name> <address>[:[port]] [param*]
说明:
name:为后端真实服务器指定一个内部名称,随便这下义一个即可。
address:后端真实服务器的iP地址或主机名。
port:指定连接请求发往真实服务器时的目标端口,在未设定时,将使用客户端请求时的同一端口。
[param*]参数有如下
check: 表示启用对后端服务器执行健康检查(默认为tcp检查)
说明:比如后端服务器有多个IP,我们也可以通过检测其他的ip和port
inter 健康状态检查的时间间隔,单位为毫秒
rise:设置人故障状态转换至正常状态需要成功检查的次数,如 rise 2:表示2次检查正确就认为此服务器可用。
fall:设置后端服务器从正常状态转换为不可用状态需要检查的次数,如 fall 3表示3 次检查失败就认为此服务器不可用。
cookie:为指定的后端服务器设定cookie值,此外指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能。
weight: 设置后端真实服务器的权重,默认为1,最大为256,设置0表示不参与负载均衡
maxconn: 设置每个backend的server进程可接受的最大并发连接数
backup:设置后端真实服务器的备份服器,仅仅在后端所有真实服务器均不可用的情况下才启用。
4、option httpchk
设置健康状态检查的方式
~~~
listen admin_status #Frontend和Backend的组合体,监控组的名称,按需自定义名称
bind 0.0.0.0:8888 #监听端口
mode http #http的7层模式
log 127.0.0.1 local3 err #错误日志记录
stats refresh 5s #每隔5秒自动刷新监控页面
stats uri /admin?stats #监控页面的url访问路径
stats realm itnihao\ welcome #监控页面的提示信息
stats auth admin:admin #监控页面的用户和密码admin,可以设置多个用户名
stats auth admin1:admin1 #监控页面的用户和密码admin1
stats hide-version #隐藏统计页面上的HAproxy版本信息
stats admin if TRUE #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)
~~~