1 访问日志不记录静态文件
网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
例如某一个网站:
因为一个网站的图片、css、js等文件太多了,如果服务器全部记录,会造成日志文件过大,占用磁盘空间,所以有必要过滤这些元素
把虚拟主机配置文件改成如下:
[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com aaa.com
SetEnvIf Request_URI ".*\.gif$" img //相当把“.\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 "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined env=!img //过滤标记
</VirtualHost>
先不要加载配置文件测试一下:
在/data/wwwroot/111.com
目下上传一个1.png
图片或者创建一个文件后缀名是图片格式的
[root@linux01 ~]# curl -x127.0.0.1:80 111.com/1.png -I
HTTP/1.1 200 OK
Date: Fri, 16 Nov 2018 03:10:22 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Last-Modified: Sat, 14 Apr 2018 09:19:00 GMT
ETag: "33892-569cb7a9de900"
Accept-Ranges: bytes
Content-Length: 211090
Content-Type: image/png
查看日志记录
[root@linux01 ~]# tail -1 /usr/local/apache2.4/logs/111.com-access_log
127.0.0.1 - - [16/Nov/2018:11:10:22 +0800] "HEAD HTTP://111.com/1.png HTTP/1.1" 200 - "-" "curl/7.29.0"
日志文件里记录了访问图片的请求
然后重新加载配置文件 -t
, graceful
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful
访问测试查看日志数量:
[root@linux01 ~]# wc -l /usr/local/apache2.4/logs/111.com-access_log
47 /usr/local/apache2.4/logs/111.com-access_log
再次请求访问:
[root@linux01 ~]# curl -x127.0.0.1:80 111.com/1.png -I
[root@linux01 ~]# wc -l /usr/local/apache2.4/logs/111.com-access_log
47 /usr/local/apache2.4/logs/111.com-access_log
日志数量并没有增加
修改一个访问文件的后缀再次访问:
[root@linux01 ~]# curl -x127.0.0.1:80 111.com/1.png1 -I
HTTP/1.1 404 Not Found
Date: Fri, 16 Nov 2018 03:16:04 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
[root@linux01 ~]# wc -l /usr/local/apache2.4/logs/111.com-access_log
48 /usr/local/apache2.4/logs/111.com-access_log
[root@linux01 ~]# tail -1 /usr/local/apache2.4/logs/111.com-access_log
127.0.0.1 - - [16/Nov/2018:11:16:04 +0800] "HEAD HTTP://111.com/1.png1 HTTP/1.1" 404 - "-" "curl/7.29.0"
访问日志增加了,虽然1.png1这个文件不存在,但说明配置文件起到了过滤图片作用
2 访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改成如下:
[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName www.111.com
ServerAlias www.111.com aaa.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 "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img // /usr/local/apache2.4/bin/rotatelogs是Apache自带的日志切割工具,-l表示使用CST时区(中国),不加默认是UTC(美国),111.com-access_%Y%m%d.log日志命名以时间天为单位切割,86400代表是1天,单位是秒
</VirtualHost>
重新加载配置文件 -t
,graceful
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful
测试日志切割是否成功:
[root@linux01 ~]# curl -x127.0.0.1:80 111.com -I
HTTP/1.1 200 OK
Date: Fri, 16 Nov 2018 03:27:28 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Last-Modified: Wed, 14 Nov 2018 03:20:20 GMT
ETag: "8-57a9769fef5ef"
Accept-Ranges: bytes
Content-Length: 8
Content-Type: text/html
生成新的日志文件:
生成的日志内容:
[root@linux01 ~]# cat /usr/local/apache2.4/logs/111.com-access_20181116.log
127.0.0.1 - - [16/Nov/2018:11:25:51 +0800] "HEAD HTTP://111.com/1.png1 HTTP/1.1" 404 - "-" "curl/7.29.0"
127.0.0.1 - - [16/Nov/2018:11:27:28 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 - "-" "curl/7.29.0"
日志切割作用:记录每天一个日志文件,然后每隔一定时间(3个月)删除,为了防止磁盘写满,方便管理日志
3 静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了,提高用户访问网站的速度,可以节省带宽
在浏览器访问服务器的图片,点击刷新后,状态码显示304
,表示没有修改变化,就不会再从服务器下载文件了
http://111.com/1.png
缺点:
- 下次再次请求就不会再去服务器下载文件了,如果该文件做了修改,浏览器就无法显示修改后的文件
- 这些静态文件一直缓存到浏览器里,也不适合
所以需要设置静态元素过期时间:
修改配置:
[root@linux01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com aaa.com
<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>
ErrorLog "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined
需要expires_module
[root@linux01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so
//把“#”
注释去掉
重新加载配置文件:
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl graceful
查看是否成功加载模块
[root@linux01 ~]# /usr/local/apache2.4/bin/apachectl -M | grep expire
expires_module (shared)
curl测试,看cache-control: max-age
[root@linux01 ~]# curl -x127.0.0.1:80 111.com/1.png -I
在浏览器测试:
ctrl+F5强制刷新
返回状态为200,缓存时间是1天
使用场景:一般公司的网页都配置这个
扩展
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