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

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