11.22 访问日志不记录静态文件

一个网站会有很多元素,尤其是图片、js、css等静态的文件非常多,用户每请求一个页面就会访问诸多的图片、js等静态元素,这些元素的请求都会被记录在日志中。如果一个站点访问量很大,那么访问日志文件增长会非常快,一天就可以达到几GB。这不仅对于服务器的磁盘空间造成影响,更重要的是会影响磁盘的读写速度。还好这些巨量的静态元素请求记录到日志里的意义并不大,所以可以限制这些静态元素去记录日志,并且需要把日志按天归档,一天一个日志,这样也可以防止单个日志文件过大

1. 修改虚拟主机配置文件:(不记录静态文件

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

   CustomLog "logs/111.com-access_log" combined env=!img

最终保存配置:

5月30日_linux 

说明:先定义一个img环境变量,把gif、jpg、png、bmp、swf、js、css等格式的文件全部归类到img里,后面的env=!imge有用到一个“!”,这相当于取反了,意思是把img以外的类型文件记录到日志里。

2. 更改配置文件后要 重新检查和加载配置文件,

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl  graceful

5月30日_5月30日_02 

3.测试配置是否成功

上传图片到对应的/data/wwwroot/abc.com/目录

5月30日_linux_03 

3.1 先访问一下abc.com 测试访问静态文件是否会产生日志

curl -x127.0.0.1:80 abc.com -I

tail /usr/local/apache2.4/logs/abc.com-access_log

5月30日_5月30日_04 

再访问abc.com/linux.jpg,测试没有产生日志

curl -x127.0.0.1:80 abc.com/linux.jpg -I

tail /usr/local/apache2.4/logs/abc.com-access_log

5月30日_5月30日_05 

 11.23 访问日志切割

 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件,防止磁盘写满,用日期记录日志方便管理及查找。还要写一个任务计划,定期清理超过时间的日志。

1. 把虚拟主机配置文件改成如下: 

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加以下配置:

 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img

 

5月30日_linux_06 

2.更改配置文件后需要重新加载配置文件:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

5月30日_linux_07 

3.测试查看是否会生成带日期的日志

curl -x127.0.0.1:80 abc.com

ls /usr/local/apache2.4/logs/    (生成带日期日志)

5月30日_5月30日_08 

cat /usr/local/apache2.4/logs/abc.com-access_20180530.log   //日志文件有记录

5月30日_linux_09 

这里的abc.com-access_20180530.log就是新生成的日志,而且以后会每天生成一个按日期格式命名的日志。

11.24 静态元素过期时间

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

在日志里会发现有一个状态码304,这个状态码表示该文件已经缓存到用户的电脑里了(浏览器访问网站的图片时会把静态的文件缓存在本地电脑里),这样下次再访问时就不用去远程下载了,而是直接访问用户电脑里面的缓存。这样做的目的是降低服务器的资源消耗,还可以提升用户访问网站的速度。那到低可以缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对,这就涉及一个静态文件缓存时长的问题,也叫作缓存过期时间

1. 把虚拟主机配置文件改成如下: 

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"

    ExpiresDefault "now plus 0 min"

</IfModule>

最终配置保存:

5月30日_5月30日_10 

解释说明:

这部分配置用到了mod_expires模块,相关配置内容并不难理解,通过字面也可以大致猜到其含义。这里gif、jpeg、png格式的文件过期时长为1天,css、js、flash格式的文件过期时长为2小时,其他文件过期时长为0,也就是不缓存。

2. 查看expires_module模块有没有打开:

/usr/local/apache2.4/bin/apachectl -M |grep expire

5月30日_5月30日_11 

2.1 没有搜到expire模块,就去主配置文件修改,将expire模块的#去掉

vim /usr/local/apache2.4/conf/httpd.conf

5月30日_linux_12 

3. 再重新检测和加载:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

4.重新查看模块是否生效:

/usr/local/apache2.4/bin/apachectl -M |grep expire

5月30日_5月30日_13 

5.curl来测试效果

curl -x127.0.0.1:80 abc.com/linux.jpg -I

5月30日_linux_14 

可以看到max-age=86400,这说明jpg的图片将缓存86400秒,也就是一天。

5.1用浏览器查看测试,刷新过后 状态码304 就是缓存下来的图片

5月30日_linux_15