格式: 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
验证效果:
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!
效果:
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
效果:
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形式
效果: