LAMP架构之访问日志的设置及切割、静态文件失效设置

本文索引

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

访问日志不记录静态文件

为什么要这样设置

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

如何设置

修改虚拟主机配置文件httpd-vhost.conf

1[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 2... 3 ErrorLog "logs/111.com-error_log" 4 5 # SetEnvIf行设置img满足URI匹配.gif等的情况,配合env=!img排除特定类型文件的错误日志记录。 6 SetEnvIf Request_URI ".*\.gif$" img 7 SetEnvIf Request_URI ".*\.jpg$" img 8 SetEnvIf Request_URI ".*\.png$" img 9 SetEnvIf Request_URI ".*\.bmp$" img 10 SetEnvIf Request_URI ".*\.swf$" img 11 SetEnvIf Request_URI ".*\.js$" img 12 SetEnvIf Request_URI ".*\.css$" img 13 CustomLog "logs/111.com-access_log" combined env=!img 14... 15 16# 重启服务,使配置生效 17[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t 18Syntax OK 19[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果验证

1# 访问包含.jpg等的路径,访问日志不会记录;访问其他则被记录 2[root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I 3HTTP/1.1 200 OK 4Date: Thu, 21 Dec 2017 11:19:25 GMT 5Server: Apache/2.4.28 (Unix) PHP/5.6.30 6Last-Modified: Thu, 21 Dec 2017 11:19:21 GMT 7ETag: "2-560d7df2b9966" 8Accept-Ranges: bytes 9Content-Length: 2 10Content-Type: image/jpeg 11 12#未记录匹配到的jpg文件访问记录! 13[root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log 14... 15// 没有最新的访问图片的记录 16192.168.65.133 - - [21/Dec/2017:19:17:32 +0800] "HEAD HTTP://111.com/111.php HTTP/1.1" 200 - "-" "curl/7.29.0"

将env!=img去掉(记得重启服务!!),看是否会记录

1# 修改配置并重启访问 2[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 3[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t 4Syntax OK 5[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful 6 7# 重新测试 8[root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I 9HTTP/1.1 200 OK 10Date: Thu, 21 Dec 2017 11:22:38 GMT 11Server: Apache/2.4.28 (Unix) PHP/5.6.30 12Last-Modified: Thu, 21 Dec 2017 11:19:21 GMT 13ETag: "2-560d7df2b9966" 14Accept-Ranges: bytes 15Content-Length: 2 16Content-Type: image/jpeg 17 18# 查看是否记录 19[root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log 20... 21# 访问jpg文件信息被记录 22192.168.65.133 - - [21/Dec/2017:19:22:38 +0800] "HEAD HTTP://111.com/111.jpg HTTP/1.1" 200 - "-" "curl/7.29.0"

访问日志切割

就算不记录某些无效信息,随之服务器的运行,访问日志文件大小也将会不断变大,通过设置日志文件自动切割以及一段时间后删除旧的日志就变得较为必要。

如何设置

修改虚拟主机配置文件

1[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 2... 3 4# /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具 5# -l参数按当前系统时间为基准进行切割(我国为CST6# %Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便 7# 86400(s)表示每天都进行切割 8 9 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img 10 # 使用"|$"替代"|"来调用shell执行,默认是不会调用shell的 11 # CustomLog "|$/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img 12... 13 14[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t 15Syntax OK 16[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果测试

查看是否生成新格式的日志文件

1[root@localhost ~]# curl -x 127.0.0.1:80 111.com/111.php 2abc.com 3 4# logs目录下已经产生当天格式的访问日志 5[root@localhost ~]# ls /usr/local/apache2.4/logs/ 6111.com-access_log abc.com-access_log error_log 7111.com-error_log abc.com-error_log httpd.pid 8111.com-access_20171221_log access_log

补充内容

如果想定期删除老日志,可以配合cron命令,可以实现。

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

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

详细说明参见:http://blog.csdn.net/lee244868149/article/details/43406335


静态文件过期时间

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次访问时就不用再次获取,直接就可以使用,可以节省带宽资源。

当状态码为304时,浏览器将不会向服务器获取已缓存的文件。

设置范例

先在主配置文件内开启expires模块

1[root@localhost logs]# vim /usr/local/apache2.4/conf/httpd.conf 2// 添加expire模块,删除行首的# 3#LoadModule expires_module modules/mod_expires.so 4 5// 查看expire模块是否已加载,没有的话要修改httpd.conf文件去加载 6[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -M | grep expire 7 expires_module (shared)

在虚拟主机配置文件内增加如下配置

1[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 2... 3<IfModule mod_expires.c> 4 # 打开该功能的开关 5 ExpiresActive on 6 7 # 按文件类型来设置自定义过期时间 8 # acess表示从访问时间开始 9 # now表示按当前时间开始 10 # plus在前面的时间基础上加上 11 # 1 hours/days 表示文件的生命周期 12 # 例如 acess plus 1 days 表示该文件从访问的时间开始1天内有效,无需重新获取 13 14 ExpiresByType image/gif "access plus 1 days" 15 ExpiresByType image/jpeg "access plus 24 hours" 16 ExpiresByType image/png "access plus 24 hours" 17 ExpiresByType text/css "now plus 2 hours" 18 ExpiresByType application/x-javascript "now plus 2 hours" 19 ExpiresByType application/javascript "now plus 2 hours" 20 ExpiresByType application/x-shockwave-flash "now plus 2 hours" 21 # 其他表示方法 22 # A:客户端访问时间 23 # M: 文件最后修改的时间 24 ExpiresByType img/bmp A2592000 25 ExpiresByType text/html M604800 26 27 # 除上述外的文件指定默认的过期时间 28 ExpiresDefault "now plus 0 min" 29</IfModule> 30...

重新加载配置文件

1[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t 2Syntax OK 3[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果验证

  • 指定类型(png)的文件访问信息

    设置后的状态信息中出现Cache-Control、Expires等信息

    [root@localhost 111.com]# curl -x 192.168.65.133:80 111.com/lvm.png -I HTTP/1.1 200 OK Date: Mon, 20 Nov 2017 13:22:07 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 Last-Modified: Wed, 01 Nov 2017 13:48:33 GMT ETag: "23e28-55cec20a0ce40" Accept-Ranges: bytes Content-Length: 146984 Cache-Control: max-age=86400 //该时间等于Expires-Date Expires: Tue, 21 Nov 2017 13:22:07 GMT // 改行显示了文件的过期时间 Content-Type: image/png

  • 默认文件类型(php)文件访问信息

    默认文件访问后马上过期,max-age为0

    [root@localhost ~]# curl -x 127.0.0.1:80 abc.com/abc.php -I HTTP/1.1 200 OK Date: Thu, 21 Dec 2017 12:03:44 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Cache-Control: max-age=0 Expires: Thu, 21 Dec 2017 12:03:44 GMT Content-Type: text/html; charset=UTF-8


点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

LNMP架构之访问日志、日志切割、静态文件不记录及过期时间设置

本文索引:Nginx访问日志Nginx日志切割静态文件不记录日志和过期时间Nginx访问日志修改nginx配置文件root@localhostvhostvim/usr/local/nginx/conf/nginx.conf搜索:/log_format

LAMP架构之php禁止解析、user_agent限定及php配置文件常规设置

本文索引:禁止某目录PHP解析限制user\_agentPHP相关配置查看PHP配置文件的位置安全函数设定设置时区错误信息日志安全相关的参数禁止某目录PHP解析某些目录可以上传图片等文件,如果不设置禁止PHP

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0

LAMP架构之访问日志的设置及切割、静态文件失效设置 - HelloWorld