一、apache日記中記錄代理IP及真實客戶端IP地址:php
一、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的三種日記格式,咱們使用的第一種:須要把combined | common | combinedio添加到配置文件httpd-vhosts.conf裏的日記格式後面便可:apache
CustomLog "|/usr/local/apapche2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
而這種日記格式的訪問日記以下:第一列表示IP地址:vim
[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\"" combinedbash
在配置文件裏新增紅色內容,而後再在vhosts裏修改便可:spa
[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
二、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
三、apache的日記切割:code
apache的日記分割有兩種造成: cronolog rotatelogsorm
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