11.22 访问日志不记录静态文件
11.23 访问日志切割
11.24 静态元素过期时间
屏蔽一些元素记录到日志
网站大多元素为静态文件,如图片、css、js等,访问一个页面可能记录一堆日志。这样即不方便查看日志,也造成日志占磁盘空间。这些元素可以不用记录。把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
CustomLog "logs/123.com-access_log" combined env=!img
</VirtualHost>
结构其实很简单,定义标签,然后在访问日志那一行配置设置env=!img。img是标签名,可以自定义。记得设置完重新加载配置文件。
mkdir /data/wwwroot/www.123.com/images
创建目录,并在这目录下上传一个图片。然后curl -x127.0.0.1:80 -I 123.com/images/123.jpg
测试,查看日志tail /usr/local/apache2.4/logs/123.com-access_log
是否屏蔽了jpg的标签。
日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
rotatelogs是apache自带的日志切割工具,参数-l指定使用系统时间(中国使用cst),不指定的话使用utc。最后重新加载配置文件,curl做一个访问。然后查看是否生成新日志, ls /usr/local/apache2.4/logs
。
静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了。除了图片,还有css等静态元素,其过期时间是在server端定义的,做好过期时间可以有效降低服务器压力。
状态码304,就是没有改变。如果不设置过期时间就会一直保存在本地。这样不利于网站提供服务,比如后期静态元素变化,但是用户很有可能只能查看到之前的内容。
过期时间配置需要expires_module模块,记得在httpd.conf开启,然后在虚拟主机的配置文件增加如下内容
<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>
curl测试,可以看到“cache-control: max-age”字样。使用浏览器(chrome、firefox),按f12也可以查看到过期时间相关信息。