访问日志不记录静态文件、访问日志切割与静态元素过期时间

访问日志不记录静态文件

  • 介绍

这部分相当于apache配置访问日志的延伸。上节我们说到配置访问日志,它会记录很多东西,如访客来源操作什么的。比如访客查看了一张图片,日志就会记录下“访客查看了这张图片”这个信息。有得网页,页就有几百张图片,这样都记录下来,放到我们服务器上负担太大,而且这些信息多余我们来说意义不大。所以这一节,我们的需求就是,在记录日志的同时,过忽略这些意义不大的文件日志

  • 具体操作
    1.修改虚拟主机的配置文件
    因为我们做的是关于访问日志的设置,所以改改虚拟主机的配置文件就好了,因此如果你的虚拟主机配置有问题请找前面的课
#进入配置文件、如果
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#配置文件如下
<VirtualHost *:80>
    DocumentRoot "/data/wwroot/111.com"
    ServerAlias www.example.com 211.com
    ServerName 111.com
    <IfModule mod_rewrite.c>
           RewriteEngine on
           RewriteCond %{HTTP_HOST} !^111.com$
    RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>
 ErrorLog "logs/111.com-error_log"
##重点部分下面
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//该处最后一段表示不要img结尾的
</VirtualHost>
  • 实验
    访问网站的一张图片,不管有没有,然后查看访问日志

现在我们还没有重启服务,所以刚才配置的文件还没有生效

#访问网站,这个图片有没有都可以,显示404,因为我们本身就没有这个文件
[root@centos001 ~]# curl -x192.168.10.120:80 111.com/sdafh.jpg -I
HTTP/1.1 404 Not Found
Date: Wed, 27 Dec 2017 14:14:50 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
#查看访问日志
[root@centos001 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
#输出
192.168.10.120 - - [27/Dec/2017:22:14:50 +0800] "HEAD HTTP://111.com/sdafh.jpg HTTP/1.1" 404 - "-" "curl/7.29.0"
#这里能看到访问日志里记录了,访客查看了图片的这个信息

2.检查并重启服务

[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful

测试
用再次访问图片,检查访问日志有没有记录。因为我们的配置文件写了不要jpg结尾的文件,后面的到的结果当然是没有了


访问日志切割

  • 目的:日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 简单来说就是 每天把日志归档 到一个文件下,方便定期删除
  • 方法 修改虚拟机配置文件 1.进入虚拟机修改文件
#进入配置文件
[root@centos001 ~]# 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 指定一个叫rotatelogs的日志切割工具(httpd自带的);
-l意为以当前系统的时间为基准,如若不指定将会以UTC(美国时间)的时间去指定,中国是CST(date能看到);
access__%Y%m%d.log 86400为日志的名字,%Y%m%d为年月日,86400为一天总的秒数(写的时候前面往加空格,后面就没有生成新的文件)

2.检查读写并重启服务,

[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful

3.测试 查看访问日志有没有被切割,也就是生成有日期的文件

#访问一个php文件,图片什么的没有记录
[root@centos001 ~]# curl -x192.168.10.120:80 111.com/123.php
#下面ls前面没有]是因为我们进入了网站文件中,也能看到生成了新的文件
123.com[root@centos0ls /usr/local/apache2.4/logs/  
111.com-access__20171228.log  111.com-error_log   abc.com-error_log  error_log
111.com-access_log            abc.com-access_log  access_log         httpd.pid
### 配置静态元素过期时间
- 介绍   
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了,能让我们访问速度更快
- 目的  
缓存总不能一直缓存吧,所有就有了“缓存过期时间”这个概念,这个过期时间实在服务上定义的,下面就将介绍怎么设置这个时间
-准备
1.在配置之前先看个东西,首先下载一个静态元素(图片什么的)到我们的服务器上
```#进入服务器目录
[root@centos001 ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  index.php
#传一张图片到虚拟服务器上
[root@centos001 111.com]# rz
#这里名字叫qq.png,最好先改个简单点名字
[root@centos001 111.com]# ls
123.php  index.php  qq.png

2.用浏览器访问我们的图片,按f12后状态码为200;当我们刷新后状态码就变304了,304的意思是检测到x我们访问的图片没有被修改过,所以就不用在重服务器上下载图片了。但是这样图片就一直缓存在我们电脑里了,所以接下来将给图片配置失效时间
输入图片说明
输入图片说明
输入图片说明

修改配置文件

  • 1.增加的配置文件如下
<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>

输入图片说明 2.检查读写、加载模块后重启服务

#检查读写
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
#检查是否有加载模块,明显没有
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire
  • 编辑主配置文件并加载模块
#进入主配置文件
[root@centos001 111.com]# vim /usr/local/apache2.4/conf/httpd.conf
#重启服务
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful
#检查加载模块成功
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire
expires_module (shared)

测试

  • 1.重新进入浏览器,访问图片,f12查看状态码,当然可以F5刷新一哈
    现在能看到过期时间为1天,下面也有过期的具体时间
    输入图片说明
  • 2.当然我们也能在虚拟机上直接访问
[root@centos001 111.com]# curl -x192.168.10.120:80 111.com/qq.png -I
HTTP/1.1 200 OK
Date: Wed, 27 Dec 2017 17:43:36 GMT//当前时间
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Last-Modified: Wed, 27 Dec 2017 16:41:20 GMT
ETag: "e01-5615511a9ac00"
Accept-Ranges: bytes
Content-Length: 3585
Cache-Control: max-age=86400 //周期
Expires: Thu, 28 Dec 2017 17:43:36 GMT //过期时间
Content-Type: image/png

扩展

apache日志记录代理IP以及真实客户端IP
http://ask.apelearn.com/question/960
apache只记录指定URI的日志
http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名
http://ask.apelearn.com/question/1037
apache 日志切割问题
http://ask.apelearn.com/question/566

猜你喜欢

转载自my.oschina.net/u/3707523/blog/1595891