由于负载均衡会转发客户端的请求到web服务器,所以web服务往往记录的是负载均衡的IP,现在可以通过下面的配置,让apache记录真实客户端IP

语法

#LogFormat  “\”%{X-Forwarded-For}i\”%l %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined

普通日志和记录客户端IP的apache日志比较

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

#LogFormat “\”%{X-Forwarded-For}i\” %l %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined

统计日志中客户端访问数量

cut -d " " -f1  www.sr1.com_access_log | sort |uniq -c|sort-rn -k1

结果:

 4799 192.168.254.251

   1335 192.168.254.250

      2 192.168.254.191

apache不记录健康检查日志

由于负载均衡的健康检查会造成apache的访问日志备大量写入,使得访问量无法统计,使用下面的方法可以让apache不再记录负载均衡的健康检查日志

配置(checkstatus.html):

SetEnvIfRequest_URI "^/checkstatus.html" dontlog

ErrorLog"logs/error_log"

LogLevel warn

CustomLog"logs/access_log" combined env=!dontlog

虚拟主机不记录健康检查日志(checkstatus.html):

<VirtualHost*:80>

    DocumentRoot"/usr/local/httpd-2.2.9/htdocs/sr1/"

    ServerName www.sr1.com

    ServerAlias www.sr1.com

SetEnvIf Request_URI "^/checkstatus.html " dontlog

    ErrorLog"logs/www.sr1.com_error_log"

   CustomLog"logs/www.sr1.com_access_log" haproxy env=!dontlog

</VirtualHost>