global
    daemon
    maxconn 60000   #ulimit -n至少为60018最大连接并发数
    #user /var/sbin/haproxy
    #user haproxy  #运行haproxy的用户
    #chroot /usr/local/haproxy  #安裝根目錄
    pidfile /var/run/haproxy.pid  
    log 127.0.0.1 local2    

defaults
    mode http
    log global
    #option http-keep-alive   #使用keepAlive连接    
    option forwardfor    #如果后端服务器需要获得客户端的真实ip,需要配置的参数,记录客户端IP在X-Forwarded-For头域中
    option http-server-close # 后端为动态应用程序建议使用http-server-close,后端为静态建议使用http-keep-alive 
    option httplog           #开启httplog,HAProxy会记录更丰富的请求信息
    option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    #option httpchk GET /healthCheck.html    #定义默认的健康检查策略
    option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康的服务器
    balance roundrobin  #设置默认负载均衡方式,轮询方式
    #balance source 设置默认负载均衡方式,类似于nginx的ip_hash
    #balance leastconn 设置默认负载均衡方式,请求转发到具有最少连接数目的后端服务器,在会话时间较长的场景中推荐使用此算法。例如数据库负载均衡等
    timeout connect 2000ms #haproxy和服务端建立连接的最大时长,设置为1秒就足够了。局域网内建立连接一般都是瞬间的
    timeout client 10000ms #和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接
    timeout server 8000ms #和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是并发时,如设置为1-3秒    
    timeout http-request 12000ms  #从连接创建开始到从客户端读取完整HTTP请求的超时时间,用于避免类DoS攻击
    timeout queue 5000ms #请求在队列中排隊的最大时长
  
########frontend前端配置##############
frontend http-in
    bind *:80 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了
    #maxconn 30000  #定义此端口上的maxconn最大连接并发数
    #url地址重寫,條件   
    #acl login_AuthCallBack path_beg -i /Account/AuthCallBack? 
    #acl login_AuthCallBack url_beg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack path_reg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
    #acl url_ms1 path_beg -i /ms1/    #定义ACL,当uri以/ms1/开头时,ACL[url_ms1]为true
    #acl url_ms2 path_beg -i /ms2/    #同上,url_ms2
    #acl web hdr(host) -i www.abc.com  #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则
    #acl img hdr(host) -i img.abc.com  #如果访问img.abc.com这个域名,就触发img规则。
    #redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1  重定向
    #redirect prefix http://192.168.21.126:8089  if login_AuthCallBack  #測試可用1  重定向
    #redirect location http://192.168.21.126:8089 if login_AuthCallBack 
    #redirect prefix http://192.168.21.201:8000  if login_AuthCallBack     
    #redirect location http://0.0.0.0:8000/  if login_AuthCallBack  
    #use_backend youxi_pool if youxi  
    #use_backend ms1 if url_ms1       #当[url_ms1]为true时,定向到后端服务群ms1中
    #use_backend ms2 if url_ms2       #当[url_ms2]为true时,定向到后端服务群ms2中
    #use_backend webserver if web   #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域。
    #use_backend imgserver if img   #如果上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个作用域。
    default_backend dynamic_servers  #其他情况时,定向到后端服务群default_servers中    

backend dynamic_servers    #定义后端服务群default_servers
   #balance roundrobin
    #棄用這行設置,會導致後端服務器誰優先寫入了cookie的值,則以後每次請求都會定向到此後端服務器(不會輪詢了) 
   #cookie app_cook insert indirect nocache
   #server webser1 192.168.21.126:8076 cookie webser1 maxconn 300 check
   server webser1 192.168.21.126:8070 cookie webser1 maxconn 300 check
   server webser2 192.168.21.126:8071 cookie webser2 maxconn 300 check
   server webser3 192.168.21.126:8072 cookie webser3 maxconn 300 check
   server webser4 192.168.21.126:8073 cookie webser4 maxconn 300 check

#backend ms1    #定义后端服务群ms1
#    balance roundrobin    #使用RR负载均衡算法
#    cookie HA_STICKY_ms1 insert indirect nocache    #会话保持策略,insert名为"HA_STICKY_ms1"的cookie
#	
#    #定义后端server[ms1.srv1],请求定向到该server时会在响应中写入cookie值[ms1.srv1]
#    #针对此server的maxconn设置为300
#    #应用默认健康检查策略,健康检查间隔和超时时间为2000ms,两次成功视为节点UP,三次失败视为节点DOWN
#    server ms1.srv1 192.168.8.111:8080 cookie ms1.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
#	
#    #同上,inter 2000ms rise 2 fall 3是默认值,可以省略
#    server ms1.srv2 192.168.8.112:8080 cookie ms1.srv2 maxconn 300 check
#
#backend ms2    #定义后端服务群ms2
#    balance roundrobin
#    cookie HA_STICKY_ms2 insert indirect nocache
#    server ms2.srv1 192.168.8.111:8081 cookie ms2.srv1 maxconn 300 check
#    server ms2.srv2 192.168.8.112:8081 cookie ms2.srv2 maxconn 300 check    

#backend imgserver
#  mode http
#  option httpchk /index.php
#  balance roundrobin 
#  server img01 192.168.137.101:80 check inter 2000 fall 3
#  server img02 192.168.137.102:80 check inter 2000 fall 3

########统计页面配置########
listen stats    #定义监控页面
    bind *:2000                   #绑定端口1080
    maxconn 10 #默认的最大连接数
    stats refresh 30s             #每30秒更新监控数据
    stats uri /stats              #访问监控页面的uri
    #stats realm HAProxy\ Stats    #监控页面的认证提示
    #stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名
    #stats auth Frank:Frank #设置监控页面的用户和密码:Frank
    #stats hide-version #隐藏统计页面上HAProxy的版本信息

#登錄回調端口監聽
listen port8070_8071_8072_8073
   bind *:8070
   bind *:8071
   bind *:8072
   bind *:8073
    #條件
   acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
    #重定向
   redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 

#listen port8070
#   bind *:8070
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8071
#   bind *:8071
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8072
#   bind *:8072
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8073
#   bind *:8073
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1