11.22 访问日志不记录静态文件

  • 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
    小技巧:
    打开浏览器,按键盘上的F12键,开发人员工具,选择Network选项(一般默认),刷新网页或打开新的页面,如下图所示:
    访问日志不记录静态文件、访问日志切割、静态元素过期时间
    在Name这列,有很多个元素,每个元素其实就代表着一个访问请求,有请求,就有日志。一网站有很多元素组成,每一个元素记录一条,那一天将近几个G的日志文件。
  • 把虚拟主机配置文件改成如下:
#添加的参数
    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/123.com-access_log" combined env=!img
#只要符合的请求,都不会记录到日志里

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

  • 重新加载配置文件-t,graceful
[root@taoyuan ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

[root@taoyuan ~]# /usr/local/apache2.4/bin/apachectl graceful
  • 创建目录,并在这目录下上传一个图片
#可以上传一张图片,放在站点的目录下,也可以在站点根目录下创建images目录用于存放图片
[root@taoyuan 123.com]# ls
index.php  qq.png
  • curl -x127.0.0.1:80 -I 123.com/qq.png
[root@taoyuan ~]# curl -x127.0.0.1:80 123.com/adaffhgf -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 14:12:39 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

#查看日志
[root@taoyuan ~]# tail /usr/local/apache2.4/logs/123.com-access_log 

127.0.0.1 - - [21/Dec/2017:22:12:39 +0800] "HEAD HTTP://123.com/adaffhgf HTTP/1.1" 404 - "-" "curl/7.29.0"

#执行*.jpg
[root@taoyuan ~]# curl -x127.0.0.1:80 123.com/adaffhgf.jpg -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 14:14:54 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

#日志里没有记录
[root@taoyuan ~]# tail /usr/local/apache2.4/logs/123.com-access_log 
127.0.0.1 - - [21/Dec/2017:22:12:39 +0800] "HEAD HTTP://123.com/adaffhgf HTTP/1.1" 404 - "-" "curl/7.29.0"

#测试图片
[root@taoyuan 123.com]# curl -x127.0.0.1:80 123.com/qq.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 14:23:37 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 13:47:55 GMT
ETag: "193e-560d9f26db8c0"
Accept-Ranges: bytes
Content-Length: 6462
Content-Type: image/png
  • tail /usr/local/apache2.4/logs/123.com-access_log
#查看日志
[root@taoyuan 123.com]# tail /usr/local/apache2.4/logs/123.com-access_log 

#没有日志记录,已经排除了
127.0.0.1 - - [21/Dec/2017:22:12:39 +0800] "HEAD HTTP://123.com/adaffhgf HTTP/1.1" 404 - "-" "curl/7.29.0"

11.23 访问日志切割

  • 日志一直记录总有一天会把整个磁盘占满,所有有必要让它自动切割,并删除老的日志文件
  • 把虚拟主机配置文件改成如下:
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123.com"
    ServerName 123.com
    ServerAlias www.123.cn www.123.com
    ErrorLog "logs/123.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.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
    #CustomLog "logs/123.com-access_log" combined env=!img
</VirtualHost>

#需要指定一个rotatelogs工具,是Apache自带的一个日志切割工具。-l 是以时间切割为单位。
#86400 表示是多久切割的时间段
  • 重新加载配置文件 -t,graceful
[root@taoyuan 123.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@taoyuan 123.com]# /usr/local/apache2.4/bin/apachectl graceful
  • ls /usr/local/apache2.4/logs
#curl测试
[root@taoyuan 123.com]# curl -x127.0.0.1:80 123.com/12141 -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 14:35:34 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

#查看文件
[root@taoyuan 123.com]# ls /usr/local/apache2.4/logs/
111.com-access_log  123.com-access_20171221.log  123.com-error_log  error_log
111.com-error_log   123.com-access_log           access_log         httpd.pid
生成了一个123.com-access_20171221.log文件

注:在实际过程中,需要建立一个任务计划,把一段时间的文件进行拷贝或删除,以保证磁盘容量永远是足够的。

12.11.24 静态元素过期时间

  • 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
  • 增加配置

<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>

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

备注:
这部分配置用到了mod_expires模块,相关配置内容并不难理解,通过字面也可以大致猜到其含义。这里gif、jpeg、png格式的文件过期时长为1天,css、js、flash格式的文件过期时长为2小时,其他文件过期时长为0。

  • 需要expires_module
#查看是否加载了expires_module 模块
[root@taoyuan 123.com]# /usr/local/apache2.4/bin/apachectl -M|grep expire
#没有加载模块

#编辑配置文件
[root@taoyuan 123.com]# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so  #去掉注释

[root@taoyuan 123.com]# /usr/local/apache2.4/bin/apachectl -M|grep expire
 expires_module (shared)
  • curl 测试,看cache-control:max-age
没有生效前的
[root@taoyuan 123.com]# curl -x127.0.0.1:80 123.com/qq.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 14:59:48 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 13:47:55 GMT
ETag: "193e-560d9f26db8c0"
Accept-Ranges: bytes
Content-Length: 6462
Content-Type: image/png

#生效之后的
[root@taoyuan 123.com]# curl -x127.0.0.1:80 123.com/qq.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 15:03:51 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 13:47:55 GMT
ETag: "193e-560d9f26db8c0"
Accept-Ranges: bytes
Content-Length: 6462
Cache-Control: max-age=86400
Expires: Fri, 22 Dec 2017 15:03:51 GMT
Content-Type: image/png

#多了cache-control参数等

浏览器结果如下:
访问日志不记录静态文件、访问日志切割、静态元素过期时间

按ctrl+f5 强制刷新
访问日志不记录静态文件、访问日志切割、静态元素过期时间