1. 程式人生 > >訪問日誌不記錄指定文件類型 、 訪問日誌切割 、靜態元素過期時間

訪問日誌不記錄指定文件類型 、 訪問日誌切割 、靜態元素過期時間

nvi 關於 否支持 文件 flash 檢查 gen cache 意思

一:訪問日誌不記錄指定文件類型

#vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在對應的虛擬主機配置文件中加入
相關配置為:
SetEnvIf Request_URI "..gif$" image-request
SetEnvIf Request_URI ".
.jpg$" image-request
SetEnvIf Request_URI "..png$" image-request
SetEnvIf Request_URI ".
.bmp$" image-request

SetEnvIf Request_URI "..swf$" image-request
SetEnvIf Request_URI ".
.js$" image-request
SetEnvIf RequestURI ".*.css$" image-request
CustomLog "|/usr/local/apache/bin/rotatelogs -l
/usr/local/apache/logs/oem.discuz.qq.com-access
%Y%m%d.log 86400" combined
env=!image-request
說明:在原來日誌配置的基礎上,增加了一些image-request的定義,比如把 gif、jpg、
bmp、swf、js、css等結尾的全標記為 image-request,然後在配置日誌的時後加一個標記
env=!image-request,這裏有個嘆號,表示取反,這樣就可以把這些忽略了。

二:訪問日誌切割

#vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在對應的虛擬主機配置文件中加入
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/aaa-error%Y%m%d.log

86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l
/usr/local/apache2/logs/aaa-access
%Y%m%d.log 86400" combined
說明:上面是兩行,註意不要寫成多於兩行。ErrorLog是錯誤日誌,CustomLog 是訪問
日誌。最前面的那個豎線其實就是管道符,意思是把產生的日誌交給rotatelogs這個工具,
而這個工具就是apache 自帶的切割日誌的工具。-l的作用是校準時區為UTC,也就是北京
時間。最後面的86400,單位是秒,所以正好是一天,那麽日誌會每天切割一次。而最後面
的combined為日誌格式,關於日誌格式在/usr/local/apcahe2/conf/httpd.conf裏面定義。
#grep LogFormat /usr/local/apache2/conf/httpd.conf
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的日誌是可以自動切割的。
方法一: 使用 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文件大小滾動,而不是按照時間或時差滾動。

三:靜態元素過期時間

這裏的靜態文件指的是圖片、js、css等文件,用戶訪問一個站點,其實大多數元素都
是圖片、js、css等,這些靜態文件其實是會被客戶端的瀏覽器緩存到本地電腦上的,目的
就是為了下次再請求時不再去服務器上下載,這樣就加快了速度,提高了用戶體驗。但這些
靜態文件總不能一直緩存,它總有一些時效性,那麽這節我們講的就是這個過期時間。配置
如下:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
或者使用mod_headers 模塊實現
<ifmodule mod_headers.c>
#htm,html,txt類的文件緩存一個小時
<filesmatch ".(html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch>
#css, js, swf類的文件緩存一個星期
<filesmatch ".(css|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch>
#jpg,gif,jpeg,png,ico,flv,pdf等文件緩存一年
<filesmatch ".(ico|gif|jpg|jpeg|png|flv|pdf)$">
header set cache-control "max-age=29030400"
</filesmatch>
</ifmodule>
說明:這裏的時間單位可以 days、hours甚至是 min,兩種不同的方法,上面使用的是
mod_expires,而下面用的是 mod_headers,要想使用這些模塊,必須要事先已經支持。如何
查看是否支持,使用命令:
#/usr/local/apache2/bin/apachectl -M
如果沒有模塊
再檢查/usr/local/apache2/modules 目錄裏有沒有那個模塊 如果有再去編輯配置文件,增加一行該模塊相關的配置

訪問日誌不記錄指定文件類型 、 訪問日誌切割 、靜態元素過期時間