访问日志不记录指定文件类型 、 访问日志切割 、静态元素过期时间

一:访问日志不记录指定文件类型

#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 目录里有没有那个模块 如果有再去编辑配置文件,增加一行该模块相关的配置

相关文章
相关标签/搜索