1. 将日志保存保存于本地指定文件或网络主机中

    wKioL1UUCmvQ6OqQAADRcuzM8a0610.jpg

格式:  log <address> <facility> [<level> [<minlevel>]]
例如:
     log 127.0.0.1:514 local0 notice         # only send important events
     log 127.0.0.1:514 local0 notice notice  # same but limit output level

     1将haproxy的日志保存在本地的/var/log/haproxy.log

    1.编辑 /etc/haproxy/haproxy.conf

log     127.0.0.1:514   local2

    2.编辑rsyslog的配置文件 /etc/rsyslog.conf  

# Provides UDP syslog reception   //选择本地监听的端口和协议,2选1即可
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception     //tcp的514
$ModLoad imtcp
$InputTCPServerRun 514

   添加一行:

local2.*                           /var/log/haproxy.log

  3. 重启rsyslog服务和HAProxy服务验证



  2  如果是将HAProxy的日志保存于网络上的其他主机

    答:  log  127.0.0.1:514   local0   ...  将IP地址改为日志地址即可。



2.将Client的Source-IP带给REALSERVER,以便REALSERVER统计

   由于HAProxy是7层反向代理,REALSERVER看到的请求都是HAProxy为源发起的,因此为了让REALSERVER能统计出真是的IP地址,需要HAProxy在转发到REALSERVER得HTTP报文中插入X-Forwarded-For字段,并携带CIP。REALSERVER能通过读取HTTP报文当中的X-Forwarded-For字段来获取CIP

 

配置:

 HAProxy:  /etc/haproxy/haproxy.conf

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor  header Client-IP     except 127.0.0.0/8 #该语句即是插入"Client-IP"字段来将客户端的ip交给后端
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    ....
......

 HTTP:   /etc/httpd/conf/httpd.conf

LogFormat "%{Client-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

验证效果:

wKioL1UUE9jh3rcuAAXZeE3NZao389.jpg



3.将禁止某网段用户访问(403),并且定向到自定义403页面

global(略)
defaults(略)
frontend  server  192.168.192.194:80
      acl  baduser  src 192.168.192.0/24   #定义需要禁止的ACL
      block  if  baduser                      # 满足ACL就block,返回403页面
      errorfile  403  /etc/haproxy/403.html   #定义返回给用户的403页面位置
      [ errorloc   xxx  URL  ]               #该方法和以上选一即可,本格式加URL
                                             #这里支持的http状态码有:200,400                                             #403,408,500,502,503,504
      ...
.....


# cat /etc/haproxy/403.html
  Sorry, you need to with the high authority!

效果:

  wKiom1UVGkHTjTnHAACYpg_t_iY782.jpg


4.HAProxy通过文件批量设置白(黑)名单

  # vi  /etc/haproxy/haproxy.conf

global(略)
defaults(略)
frontend  server  192.168.192.194:80
      block  if { src -f /etc/haproxy/black.list }  #write.list当中的IP或者                                                     #网段为黑名单
      \\tcp-request content accept if { src -f /etc/haproxy/write.list }
      \\tcp-request content reject
                                  #tcp-request content直接在tcp阶段接受或者拒                                   #绝,而block是在7层拒绝,返回403错误,2者选1
      errorfile 403  /etc/haproxy/403.html
      default_backend default
       ....
....
....

 #  cat /etc/haproxy/black.list

[root@#localhost haproxy]# cat /etc/haproxy/black.list   #创建黑名单文件
192.168.192.0/24
192.168.1.1


5.HAProxy添加自定义响应报文

  简介:HAProxy在调度完REALSERVER后,在响应客户端的请求报文中插入自定义的字段和值

配置:

     语法:  rspadd  name   if   条件  

                             #可放在frontend,backend中,如果在frontend则对所有的backend都生效,                                                #如 果放在backend则只对对应的backend生效

      acl all  src 0.0.0.0/0        #对所有的源地址都做操作
      rspadd X-via:\ 192.168.192.194 if all

效果:

   wKiom1UWG0DimL_qAAQmlgy-iT4302.jpg



6.HAProxy调度REALSERVER服务器的时候,插入自定义请求报文,用于RS记录日志

语法:  reqadd  name   if   条件  

                                  #可放在frontend,backend中,如果在frontend则对所有的backend都生效                                                #如 果放在backend则只对对应的backend生效

acl  all  src 0.0.0.0/0
reqadd  myheader:\ test_header  if  all  #注意必须使用name:\  value形式

效果:

wKiom1UWJGzTgAhBAACUto_2SNo045.jpg

wKioL1UWKNXzMLi1AAEWwZ9ZZAI664.jpg