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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问日志不记录指定文件类型 访问日志切割 静态元素过期时间相关的知识,希望对你有一定的参考价值。

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

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

以上是关于访问日志不记录指定文件类型 访问日志切割 静态元素过期时间的主要内容,如果未能解决你的问题,请参考以下文章

lamp-日志设置(访问日志切割不记录静态文件日志缓存文件过期时间)

11.22-11.24访问日志不记录静态文件,访问日志切割,静态元素过期时间

设置日志不记录指定类型的文件,日志文件的切割

访问日志不记录静态文件;访问日志切割;静态图片等元素过期时间

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间

Nginx访问日志日志切割静态文件不记录日志和过期时间