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

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

作者: XiaoMing丶 | 来源:发表于2018-11-17 00:24 被阅读0次

目录

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

一、访问日志不记录静态文件

一个网站会有很多元素,尤其是图片、js、css等静态的文件非常多,用户每请求一个页面就会访问诸多的图片、js等静态元素,这些元素的请求都会被记录在日志中。这些元素是静态文件,全都记录的话会然过日志文件太大,浪费磁盘空间,所有没必要记录,我们可以设置配置文件将它们排除掉。
编辑配置文件如下:

···
···
ErrorLog "logs/www.ming1.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/www.ming1.com-access_log" combined env=!img
</VirtualHost>

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

  • 测试
    修改的配置文件在重新加载前没有生效,此时关于.jpg的访问是被记录的:
[root@minglinux-01 ~] curl -x127.0.0.1:80 www.ming1.com/aab.jpg -I
HTTP/1.1 404 Not Found
Date: Fri, 16 Nov 2018 14:51:09 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@minglinux-01 ~] tail -n2 /usr/local/apache2.4/logs/www.ming1.com-access_log 
192.168.162.1 - - [16/Nov/2018:22:12:40 +0800] "GET /admin.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [16/Nov/2018:22:51:09 +0800] "HEAD HTTP://www.ming1.com/aab.jpg HTTP/1.1" 404 - "-" "curl/7.29.0"

重载配置文件后.jpg的访问记录就不会记录到日志了:

[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@minglinux-01 ~] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 ~] curl -x127.0.0.1:80 www.ming1.com/aabbbbbb.jpg -I
HTTP/1.1 404 Not Found
Date: Fri, 16 Nov 2018 15:02:38 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@minglinux-01 ~] tail -n2 /usr/local/apache2.4/logs/www.ming1.com-access_log 
192.168.162.1 - - [16/Nov/2018:22:12:40 +0800] "GET /admin.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [16/Nov/2018:22:51:09 +0800] "HEAD HTTP://www.ming1.com/aab.jpg HTTP/1.1" 404 - "-" "curl/7.29.0"

其他为被禁用的格式也是回被记录的,如下:

[root@minglinux-01 ~] curl -x127.0.0.1:80 www.ming1.com/aabbbbbb.jpg1 -I
HTTP/1.1 404 Not Found
Date: Fri, 16 Nov 2018 15:04:51 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@minglinux-01 ~] tail -n2 /usr/local/apache2.4/logs/www.ming1.com-access_log 
127.0.0.1 - - [16/Nov/2018:22:51:09 +0800] "HEAD HTTP://www.ming1.com/aab.jpg HTTP/1.1" 404 - "-" "curl/7.29.0"
127.0.0.1 - - [16/Nov/2018:23:04:51 +0800] "HEAD HTTP://www.ming1.com/aabbbbbb.jpg1 HTTP/1.1" 404 - "-" "curl/7.29.0"

二、访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文文件。

把虚拟主机配置文件httpd-vhosts.conf修改成如下:

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

rotetelogs为httpd自带切割日志的工具,它会把访问日志按我们定义的文
件名格式进行切割,其中86400单位是“秒”,相当于“一天”。

测试:

[root@minglinux-01 /usr/local/apache2.4/logs] ls
access_log  www.ming1.com-access_log  wwww.ming2.com-access_log
error_log   www.ming1.com-error_log
httpd.pid   www.ming2.com-error_log
[root@minglinux-01 /usr/local/apache2.4/logs] /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@minglinux-01 /usr/local/apache2.4/logs] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 /usr/local/apache2.4/logs] ls
access_log  www.ming1.com-access_log  wwww.ming2.com-access_log
error_log   www.ming1.com-error_log
httpd.pid   www.ming2.com-error_log
[root@minglinux-01 /usr/local/apache2.4/logs] curl -x127.0.0.1:80 www.ming1.com/aabbcc.jpg1 -I
HTTP/1.1 404 Not Found
Date: Fri, 16 Nov 2018 15:20:51 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@minglinux-01 /usr/local/apache2.4/logs] ls
access_log  www.ming1.com-access_20181116.log  www.ming2.com-error_log
error_log   www.ming1.com-access_log           wwww.ming2.com-access_log
httpd.pid   www.ming1.com-error_log

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

做日志切割的目的一是防止磁盘被日志写满,二是方便管理日志文件。

我们可以制定一个任务计划,指定定期删除部分日志,防止磁盘被日志写满。

三、静态元素过期时间

浏览器访问网站时会把静态的文件(图片、CSS、js等)缓存在本地电脑里,这样下次再访问时就不用下载了,被缓存文件在电脑上的缓存时长由服务器定义,若服务器不定义,则电脑不会清空这些缓存文件。

  • 第一次从浏览器访问图片:


    第一次访问
  • 再次访问:


    再次访问

可以看到第二次访问时状态码变成了304 Not Modified,服务器没有定义本地缓存失效的时间,只要浏览器检测到本地缓存的图片没有被修改,那么状态码就一直是304。

  • 配置文件定义静态文件缓存失效时间

编辑httpd-vhosts.conf文件增加以下内容:

[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] 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>

[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] /usr/local/apache2.4/bin/apachectl -t     
Syntax OK


  • 打开expire模块
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] vim /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so  //将该行前面的#号删掉
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] /usr/local/apache2.4/bin/apachectl -M|grep expire
 expires_module (shared)
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] /usr/local/apache2.4/bin/apachectl graceful   //重载配置文件

  • curl测试:
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] curl -x127.0.0.1:80 www.ming1.com/1.png -I
HTTP/1.1 200 OK
Date: Fri, 16 Nov 2018 16:15:18 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Last-Modified: Sun, 09 Sep 2018 10:02:50 GMT
ETag: "5a1a2-5756d57e40680"
Accept-Ranges: bytes
Content-Length: 369058
Cache-Control: max-age=86400   //缓存保留时长
Expires: Sat, 17 Nov 2018 16:15:18 GMT //缓存失效时间
Content-Type: image/png  //文件类型

  • 注销expires_module后
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] vim /usr/local/apache2.4/conf/httpd.conf
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] /usr/local/apache2.4/bin/apachectl -M|grep expire
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] /usr/local/apache2.4/bin/apachectl graceful
[root@minglinux-01 /usr/local/apache2.4/htdocs/ming1] curl -x127.0.0.1:80 www.ming1.com/1.png -I
HTTP/1.1 200 OK
Date: Fri, 16 Nov 2018 16:19:08 GMT
Server: Apache/2.4.37 (Unix) PHP/5.6.30
Last-Modified: Sun, 09 Sep 2018 10:02:50 GMT
ETag: "5a1a2-5756d57e40680"
Accept-Ranges: bytes
Content-Length: 369058
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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/yhppfqtx.html