扩展44:apache记录代理IP及真实IP 客户端请求域名 只记录指定URL日记 日记切割

白昼怎懂夜的黑 提交于 2019-12-06 12:39:47

1、apache日记中记录代理IP及真实客户端IP地址

1、apache的访问日记格式定义:     /usr/local/apapche2.4/conf/httpd.conf

[root@localhost_02 apapche2.4]# cat /usr/local/apapche2.4/conf/httpd.conf|grep LogFormat
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

如上图例是apache的三种日记格式,我们使用的第一种:需要把combinedcommon  | combinedio添加到配置文件httpd-vhosts.conf里的日记格式后面即可:

    CustomLog "|/usr/local/apapche2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img

而这种日记格式的访问日记如下:第一列表示IP地址:

[root@localhost_02 logs]# tail -f 123.com-access_20180902.log 
192.168.149.135 - - [02/Sep/2018:11:23:17 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
192.168.149.135 - - [02/Sep/2018:11:23:19 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
192.168.149.135 - - [02/Sep/2018:11:23:20 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

其实第一列“%h”表示访问这的IP地址,如果在Web的前端有一层代理,那么这个%h显示的就是代理IP地址,这不是我们想要的,所以log的日记改为:LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

在配置文件里新增红色内容,然后再在vhosts里修改即可:

[root@localhost_02 conf]# cat /usr/local/apapche2.4/conf/httpd.conf|grep LogFormat
    LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

2、apache只记录URL的日记,不记录主域名:    配置文件:/usr/local/apapche2.4/conf/extra/http-vhosts.conf

需求:不记录www.111.com,    只记录www.111.com/123.php 

[root@localhost_02 logs]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf 
   SetEnvIf Request_URI "^/111/.*" aaa-request
    CustomLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apapche2.4/logs/123-access_%Y%m%d.log 86400" combined env=aaa-request

  3、apache的日记切割

apache的日记分割有两种形成:     cronolog            rotatelogs

apache的日志是可以自动切割的。
方法一: 使用 cronolog 为每一天建立一个新的日志
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
也可以按小时 
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined
方法二:使用 rotatelogs 每一天记录一个日志
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
每小时 
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d%H.log 3600" combined
再看apache rotatelogs语法
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
-l
使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。所以一定要加上-l 否则出现的日志时间和实际时间是相差8小时的。
logfile
它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件滚动的以秒为单位的间隔时间。
offset
相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM
指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。

 

扩展:

apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!