访问日志

1.访问日志不记录静态文件

       一个网站会有很多元素,比如图片、js、css等静态文件比较多,用户每请求一个页面就会访问很多的静态元素,这些元素的请求都会被记录到日志中去。如果一个网站访问量比较大,那么访问日志就会增加的非常快,甚至一天就可以达到几个GN。这不仅会对服务器的磁盘空间造成影响,更重要的是会影响磁盘的读写速度。

       把这些静态元素的请求记录到日志里意义并不是很大,所以可以限制这些静态元素去记录日志。

编辑虚拟主机配置文件,定义了一个img的环境变量,把gif、jpg、png、bmp、swf等格式的文件全部归类到img里,后面的env=!img表示取反,意思是把除img以外的文件全部记录到日志中:


    DocumentRoot "/data/wwwroot/aaa.com"
    ServerName aaa.com
    
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^aaa.com$
        RewriteRule ^/(.*)$ http://aaa.com/$1 [R=301,L]
    
    ServerAlias www.aaa.com
    ErrorLog "logs/aaa.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/aaa.com-access_log" combined env=!img

重新加载配置;

[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl graceful

为了测试,在/data/wwwroot/aaa.com/目录下上传一张图片;

[root@yuioplvlinux-128 ~]# cd /data/wwwroot/aaa.com/
[root@yuioplvlinux-128 aaa.com]# ls
123.php  index.html
[root@yuioplvlinux-128 aaa.com]# rz

[root@yuioplvlinux-128 aaa.com]# ls
123.php  2959d05a089225a9bcfeccb039a5fe62.jpg  index.html
[root@yuioplvlinux-128 aaa.com]# curl -x192.168.30.128:80 aaa.com/2959d05a089225a9bcfeccb039a5fe62.jpg -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 12:54:58 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Thu, 05 Apr 2018 05:45:54 GMT
ETag: "3cf5-5691373f0a880"
Accept-Ranges: bytes
Content-Length: 15605
Content-Type: image/jpeg

也可以在浏览器中访问;

访问日志_第1张图片

查看访问日志,可以看到并没有访问图片的记录;

[root@yuioplvlinux-128 ~]# tail /usr/local/apache2/logs/aaa.com-access_log  
127.0.0.1 - - [29/May/2018:22:51:08 +0800] "HEAD HTTP://aaa.com/ HTTP/1.1" 200 -  
127.0.0.1 - - [29/May/2018:22:51:24 +0800] "HEAD HTTP://www.aaa.com/ HTTP/1.1" 301 -  
192.168.30.1 - - [29/May/2018:23:00:23 +0800] "GET / HTTP/1.1" 304 -  
192.168.30.1 - - [29/May/2018:23:00:24 +0800] "GET /favicon.ico HTTP/1.1" 404 209  
127.0.0.1 - - [29/May/2018:23:53:51 +0800] "HEAD HTTP://www.aaa.com/ HTTP/1.1" 301 - "-" "curl/7.29.0"  
192.168.30.1 - - [29/May/2018:23:55:46 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"  
192.168.30.1 - - [29/May/2018:23:55:47 +0800] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"  
192.168.30.1 - - [29/May/2018:23:55:48 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"  
192.168.30.1 - - [29/May/2018:23:55:48 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"  
192.168.30.1 - - [29/May/2018:23:55:49 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" 

2.切割日志文件

修改虚拟主机配置主机,将其写入日志的配置改为如下所示:

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

使用管道符,将日志内容交给rotatelogs工具处理,rotatelogs工具是httpd自带切割日志的工具,它会把访问日志按定义的文件格式进行切割。-l表示以当前系统的时间为基准,如果不指定这个选项,就会以UTC时间格式切割;%Y%m%d表示年月日,86400单位是“秒”,表示一天;

重新加载;

[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl graceful

使用curl访问,查看/usr/local/apache2/logs/目录,可以看到生成了名为aaa.com-access_20180530_log的日志文件。

[root@yuioplvlinux-128 ~]# curl -x192.168.30.128:80 aaa.com/123.php -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 13:34:23 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8


[root@yuioplvlinux-128 ~]# cd /usr/local/apache2/logs/
[root@yuioplvlinux-128 logs]# ls
123.com-access_log           aaa.com-access_log  access_log  httpd.pid          yu.com-error_log
aaa.com-access_20180530_log  aaa.com-error_log   error_log   yu.com-access_log
[root@yuioplvlinux-128 logs]# cat aaa.com-access_20180530_log 
192.168.30.128 - - [30/May/2018:21:34:23 +0800] "HEAD HTTP://aaa.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0"

3.配置静态元素过期时间

平时访问网站时,会将一些页面的数据缓存到本地,如果服务器上的某个图片更改了,那么就应该访问新的图片才对,这涉及到一个静态文件缓存时长的问题,也叫作“缓存过期时间”。

修改虚拟主机配置文件为:


    DocumentRoot "/data/wwwroot/aaa.com"
    ServerName aaa.com
     
        RewriteEngine on  
        RewriteCond %{HTTP_HOST} !^aaa.com$  
        RewriteRule ^/(.*)$ http://aaa.com/$1 [R=301,L] 
    
    ServerAlias www.aaa.com
    ErrorLog "logs/aaa.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 "|/usr/local/apache2/bin/rotatelogs -l logs/aaa.com-access_%Y%m%d_log 86400" combined env=!img
    
    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"

这部分配置用到了mod_expires模块,这里gif、jpeg、png格式的文件过期时长为1天,css、js、flash格式的文件过期时间为2小时,其它文件过期时长为0,也就是不缓存。

使用命令“ /usr/local/apache2/bin/apachectl -M | grep expires”查看是否加载了expires模块,若是没有结果,要去主配置文件中打开该模块;

访问日志_第2张图片

重新加载;

[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl -M | grep expires
 expires_module (shared)
[root@yuioplvlinux-128 ~]# /usr/local/apache2/bin/apachectl graceful

使用curl来测试效果;

[root@yuioplvlinux-128 ~]# curl -x192.168.30.128:80 aaa.com/2959d05a089225a9bcfeccb039a5fe62.jpg -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 14:19:22 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Thu, 05 Apr 2018 05:45:54 GMT
ETag: "3cf5-5691373f0a880"
Accept-Ranges: bytes
Content-Length: 15605
Cache-Control: max-age=86400
Expires: Thu, 31 May 2018 14:19:22 GMT
Content-Type: image/jpeg

可以看到“Cache-Control: max-age=86400”这一行,说明jpg的图片将缓存86400秒,Date为当前时间,是GMT格式的;Expires为过期时间。

也可以在浏览器中查看,第一次打开浏览器访问,状态码是200;

访问日志_第3张图片

重新刷新这个页面,状态码显示为304,表示页面数据未发生更新,从缓存中调用的内容。

访问日志_第4张图片


你可能感兴趣的:(Linux,Linux)