6、Haproxy高级功能
6.6、自定义日志capture
capture {request|response} header捕获并记录指定请求或响应首部最近一次出现时的第一个值,捕获的首部值使用花括号{}括起来后添加进日志中
如果需要捕获多个首部值,他们将以指定的次序出现在日志文件中,并以竖线"|"作为分隔符,不存在的首部记录为空字符串,最常需要捕获的首部有如下几个:
1、虚拟主机环境中使用的Host字段
2、上传请求首部中的Content-length字段
3、快速区别真实用户和网络机器人的User-agent字段
4、代理环境中记录真实请求来源的X-Forward-Forward-F字段
capture语法:capture request header <name> len <length>
<name>:要捕获的名称,不区分大小写,注意:记录在日志中是首部对应的值,而非首部名称
<length>:指定记录首部值时所记录的精确长度,超出的部分将会被忽略
6.6.1、配置示例
在日志里体现每个请求,请求的主机头信息
cat /etc/haproxy/haproxy.cfg
frontend web
bind *:80
mode http
capture request header Cache-Control len 40 # 捕捉请求的域名
capture request header Host len 40 # 捕捉请求的域名
capture request header User-Agent len 16 # 捕捉请求的设备
capture response header Server len 40 # 捕捉响应的Server是什么
use_backend webservers
backend webservers
balance roundrobin
server web1 172.16.1.7:80 check
server web2 172.16.1.8:80 check
6.6.2、验证日志
#日志结果,关注{}中内容,第一个{}是request,第二个{}是response
haproxy: 10.0.0.100:48132 main webcluster/web2 {|curl/7.29.0}
haproxy: 10.0.0.100:48132 main webcluster/web2 {|curl/7.29.0} {nginx/1.18.0}