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

访问日志不记录指定类型的文件

通常情况下一个网站会有很多元素,尤其是图片、js、css等静态的文件非常多,用户每请求一个页面就会访问诸多的图片、js(javascripts)、css(Cascading Style Sheets)等静态元素,这些元素的请求都会被记录在日志中。如果一个站点访问量很大,那么访问日志文件增长会非常快,这不仅会占用很多的磁盘空间,还会影响磁盘的读写速度。实际上这些巨量的静态元素请求记录到日志里的意义并不大,所以我们往往会通过修改配置文件让这些静态元素的请求记录不写到日志文件当中

  • 默认情况下,当我们访问一个网站的静态元素,如jpg图片等,在日志文件里会有记录
  • 下面的例子是我使用浏览器浏览了该网站下的一个123.jpg的图片
192.168.254.1 - - [22/Aug/2018:03:07:12 +0800] "GET /123.jpg HTTP/1.1" 200 775702 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

下面通过修改配置文件,让浏览静态文件的记录不会写进日志文件中

  • 编辑虚拟主机配置文件 vim /usr/local/apache/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
	```
       SetEnvIf                  设置匹配条件
       img                       设置一个标记
       env=!img                  不记录访问带有标记img的项
虚拟主机的配置文件如下

<VirtualHost :80> DocumentRoot "/tmp/ccc.com" ServerName ccc.com ServerAlias www.ccc.com 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 ErrorLog "ccc.com_log" CustomLog "ccc.com_log" combined env=!img

再次访问该网站下的123.jpg,发现记录不会被写到日志文件中。

## 访问日志切割
为了更方便的查看和管理日志,我们可以将日志文件切割成n多个,比如一天生成一个日志文件,这样不但容易查看和管理,还可以防止单个日志文件过大。
- 编辑配置文件 vim /usr/local/apache/conf/extra/httpd-vhosts.conf
- 选中Customlog这一行进行编辑
`CustomLog "|/usr/local/apache/bin/rotatelogs -l logs/ccc.com-access_log_%Y%m%d.log 86400" combined env=!img`
/usr/local/apache/bin/rotatelogs      这是apache自带的一个日志切割功能
- -l      表示按照本机时间进行切割,如果不加-l那么表示使用UTC时间,中国使用的是CST时间
- %Y%m%d.log 表示年月日,日志切割的时候后缀名会加上年月日,
86400 表示每过86400秒就生成一个新的日志文件,86400就是一天的时间
-  配置完成后需要检查配置文件以及重新加载配置文件才会生效
        /usr/local/httpd2.4/bin/apachectl -t
        /usr/local/httpd2.4/bin/apachectl graceful
当再次访问该网站的时候就会发现,系统生成了一个新的日志文件`ccc.com-access_log_20180821.log`

[root@localhost logs]# ls 111.com-access_log ccc.com-access_log_20180821.log dummy-host2.example.com-error_log dummy-host.example.com-error_log httpd.pid access_log dummy-host2.example.com-access_log dummy-host.example.com-access_log error_log```

静态元素过期时间

在使用浏览器浏览网页时,浏览器会把网页资料缓存(Cache)到本地,用以加快下回浏览相同网页时不必再重新加载,提升访问速度。使用mod_expires模块来加速网页浏览,这里所谓的”加速”,其实是利用”mod_expires”的功能,来设定网页文件的过期时间,只要网页文件的过期时间未到,浏览器就会引用缓存的资料,而不用再去加载站点上的文件,可以减少浏览者对网站的带宽占用(例如有些虚拟主机有限制网站可使用的流量)

  1. 编辑配置文件 vim /usr/local/apache/conf/extra/httpd-vhosts.conf
  2. 选择需要配置的虚拟注意,添加如下配置
 <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>
	```
      其中使用<IfModule></IfModule>来包夹指令可以避免在mod_expires模组没有启用的情况下还要去执行.如果mod_expires模组确定已经启用,那不写<IfModule></IfModule>也没关系。
 - ExpiresActive on:    启用mod_expires功能,相对的Off就是关闭功能
 - ExpiresByType :      ExpiresByType指令是依照不同的网页文件型态来做过期时间设定
 - access :过期起算时间有三种,分别是access、now 以及modification.其中access与now意义相同,而modification指的是网页文件的”最后编辑时间”.所以如果要以档桉的最 后编辑时间起算,可以写成这样,”modification plus 10 days”.而时间的指定也很简单,就是英文单字(years、months、weeks、days、hours、minutes、seconds).例 如,可以写成这样,”access plus 1 month 15 days 2 hours”
 -  ExpiresDefault:    表示其它的设置默认。
3. 检查expire模块是否打开,如果没有打开需要在Apache主配置文件中开启
    检查模块是否加载  `/usr/local/apache/bin/apachectl -M |grep expire  expires_module (shared)`如果模块未加载,编辑主配置文件`vim /usr/local/apache/conf/httpd.conf`
4. 搜索关键字:,找到这一行,并删掉该行首的#:`#LoadModule expires_module modules/mod_expires.so`
1. 重新加载配置文件`/usr/local/apache/bin/apachectl graceful`

- 在没有配置上述这些内容时,使用curl访问该站点反馈的内容为

[root@localhost logs]# curl -x127.0.0.1:80 ccc.com/123.jpg -I HTTP/1.1 200 OK Date: Tue, 21 Aug 2018 12:23:23 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 Last-Modified: Tue, 14 Jul 2009 05:32:31 GMT ETag: "bd616-46ea3c3d3b9c0" Accept-Ranges: bytes Content-Length: 775702 Content-Type: image/jpeg

- 在配置了上述的内容后,再使用curl访问该站点反馈的内容为:

[root@localhost logs]# curl -x127.0.0.1:80 ccc.com/123.jpg -I HTTP/1.1 200 OK Date: Tue, 21 Aug 2018 12:27:31 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 Last-Modified: Tue, 14 Jul 2009 05:32:31 GMT ETag: "bd616-46ea3c3d3b9c0" Accept-Ranges: bytes Content-Length: 775702 Cache-Control: max-age=86400 多了一行元素过期时间86400秒 Expires: Wed, 22 Aug 2018 12:27:31 GMT Content-Type: image/jpeg

转载于:https://my.oschina.net/u/3731306/blog/1931702

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值