LAMP 架构——日志管理

访问日志不记录静态文件

网站大多为静态网页,网页内部的图片、css 文件等同样有其网址链接,如果不设置,这些无效的信息也将被存入访问日志中,会导致访问日志文件大小快速增加,占用大量存储空间。我们可以通过设置不记录某些文件来减少无效信息,节省内存资源。

步骤如下

编辑虚拟主机配置文件

[root@dl-001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

	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
	//以上为定义变量:将所有关于图片的请求定义为变量img

    CustomLog "logs/111.com-access_log" combined env=!img
    //"env=!img"表示非img变量。意思是:不记录关于变量img的请求日志。

说明:
将所有访问图片的请求定义为变量 img,在访问记录(日志)中将其排除即可。重新加载后使用 curl 访问 img 变量中所指定格式的文件内容时将不会产生访问记录。


访问日志切割

随着服务器的运行,访问日志文件大小也将会不断变大,日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件

步骤如下

1,编辑虚拟主机配置文件

[root@dl-001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img
 // /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具
// -l参数按当前系统时间为基准进行切割(我国为CST)
// %Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便
// 86400(s)表示每天都进行切割

2,重新加载

[root@dl-001 logs]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@dl-001 logs]# /usr/local/apache2.4/bin/apachectl graceful

3,测试效果

[root@dl-001 ~]# curl -x 127.0.0.1:80 111.com/111.php 
abc.com

# logs目录下已经产生当天格式的访问日志
[root@dl-001 ~]# ls /usr/local/apache2.4/logs/
111.com-access_log           abc.com-access_log  error_log
111.com-error_log            abc.com-error_log   httpd.pid
111.com-access_20171221_log  access_log

4,定期删除老日志

[root@dl-001 ~]# crontab -e  
0 0 1 * * /usr/bin/find /usr/local/apache2.4/logs/ -regex ".*/.*-access_.*_log" -mtime +15 -exec rm -f {} \
//每月1号0点0分删除15天以前的所有带日期的日志文件

说明:由于 find 目录查找文件显示为绝对路径,使用正则来匹配时不能只单单匹配文件名,还需要匹配其之前的路径,这里使用了 -regex 这个不常用的参数。


静态文件失效时间设置

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了

步骤如下

1,在主配置文件中开启 expire

[root@dl-001 logs]# vim /usr/local/apache2.4/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so
//如果这一行被注释掉了请删除注释

2,查看 expire 模块是否加载

[root@dl-001 ~]# /usr/local/apache2.4/bin/apachectl -M | grep expire
Syntax OK
 expires_module (shared)

3,在虚拟主机配置文件中增加配置

[root@dl-001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.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"
    
    // 按文件类型来设置自定义过期时间
    // acess表示从访问时间开始
    // now表示按当前时间开始
    // plus在前面的时间基础上加上
    // 1 hours/days 表示文件的生命周期
    // 例如 acess plus 1 days 表示该文件从访问的时间开始1天内有效,无需重新获取


    ExpiresDefault "now plus 0 min"    //除上述外的文件指定默认的过期时间
</IfModule>

说明:重新加载后使用 curl 可以看到效果