LAMP架构(6) 访问日志不记录静态文件,访问日志切割,静态元素过期时间

访问日志不记录静态文件
网站的页面会有很多元素,尤其是图片,js,css,等静态元素非常多,每一次访问都会访问大量的静态元素,这些元素请求都会被记录在日志中,因此日志的增长速度非常快,然而记录静态元素的意义并不大,因此我们需要限制静态元素的记录,并且将日志进行切割,并按天归档整理,防止单个日志文件过大。
配置访问日志不记录静态文件:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加日志记录规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined env= ! img
</VirtualHost> 取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出

测试语法并重新加载配置
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
创建目录,创建test.jpg图片,并测试访问
[root@aliyun ~]# mkdir /data/wwwroot/www.test.com/images/
[root@aliyun ~]# touch /data/wwwroot/www.test.com/images/ test.jpg
[root@aliyun ~]# curl -x127.0.0.1:80 -I www.test.com/images/ test.jpg
HTTP/1.1 200 OK 访问成功
Date: Thu, 31 May 2018 02:43:12 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Thu, 31 May 2018 02:41:59 GMT
ETag: "0-56d77695b2edb"
Accept-Ranges: bytes
Content-Type: image/jpeg
查看日志记录
[root@aliyun ~]# tail /usr/local/apache2.4/logs/elon.org.cn-access_log
171.210.158.19 - - [31/May/2018:09:37:05 +0800] 90 "GET /music/%25d3%25de%25b0%25ae.wma HTTP/1.1" 301 257 "-" "QQMusic 8030004(android 6.0.1)"
219.136.131.134 - - [31/May/2018:09:45:05 +0800] 102 "GET /music/%EF%BF%BD%DE%B0%EF%BF%BD.Wma HTTP/1.1" 301 261 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
120.40.85.250 - - [31/May/2018:09:50:44 +0800] 100 "GET /music/%EF%BF%BD%EF%BF%BD%EF%BF%BD%D2%BB%EF%BF%BD%CE%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD.Wma HTTP/1.1" 301 330 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
61.183.176.172 - - [31/May/2018:10:01:10 +0800] 114 "GET /music/%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%D0%A9%CB%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD.wma HTTP/1.1" 301 366 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
121.235.75.245 - - [31/May/2018:10:01:12 +0800] 108 "GET /music/%EF%BF%BD%DE%B0%EF%BF%BD.Wma HTTP/1.1" 301 261 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
121.235.75.245 - - [31/May/2018:10:04:41 +0800] 101 "GET /music/%EF%BF%BD%DE%B0%EF%BF%BD.Wma HTTP/1.1" 301 261 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
176.233.0.16 - - [31/May/2018:10:08:47 +0800] 91 "GET / HTTP/1.1" 301 227 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
61.183.176.172 - - [31/May/2018: 10:14:20 +0800] 107 "GET /music/%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%D0%A9%CB%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD.wma HTTP/1.1" 301 366 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
120.40.85.250 - - [31/May/2018: 10:24:20 +0800] 99 "GET /music/%EF%BF%BD%EF%BF%BD%EF%BF%BD%D2%BB%EF%BF%BD%CE%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD.Wma HTTP/1.1" 301 330 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
213.202.233.143 - - [31/May/2018: 10:26:44 +0800] 262 "GET /admin/index.php HTTP/1.1" 301 242 "-" "Python-urllib/3.5"
可以看到最后三个访问记录中,并没有针对图片test.jpg的访问的记录。

访问日志切割
配置访问日志交由rotatelogs处理:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加日志记录规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog " | /usr/local/apache2.4/bin/ rotatelogs -l logs/test.com-access _ %Y%m%d.log 86400 " combined env= ! img
</VirtualHost> !取反,不记录变量所表示的文件访问记录,并将日志交由rotatelogs处理,以test.com-access_年月日.log格式保存,且每86400秒保存一次,86400秒=1天
保存退出

测试语法并重新加载配置
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
查看日志文件
[root@aliyun ~]# curl -x127.0.0.1:80 test.com 再次访问以生成新日志
我是来打酱油的!
[root@aliyun ~]# ls /usr/local/apache2.4/logs/ 查看日志文件
access_log dummy-host.example.com-access_log test.com -access_log httpd.pid
dummy-host2.example.com-access_log dummy-host.example.com-error_log test.com -error_log 123.com-access_log dummy-host2.example.com-error_log test.com-access_20180531.log error_log 123.com-error_log


静态元素过期时间
对于短时间内的重复访问,将静态元素设置为仅在第一次下载,不仅可以减轻服务器压力,又可以提升用户访问体验。但这个时间不能设置的过长,具体情况根据网站自身内容的更新频率而定,对于用户请求超过了设置的时间,客户端会重新向服务器请求静态元素,以保证页面最新。

配置静态元素过期时间:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加静态元素规则:
<VirtualHost *: 80 > 80是http的服务端口,不用改
ServerAdmin webmaster @ test.com 网站管理员邮箱,设置成自己的网站
DocumentRoot " /data/wwwroot/www.test.com " 虚拟主机根目录放网站程序
ServerName test.com 网站名,域名
ServerAlias www .test.com 网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteEngine on 打开rewrite功能
RewriteCond %{HTTP_HOST} !^ www.test.com $ 将 www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http:// www.test.com /$1 [R= 301,L ] 状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转, $1代表^/(.*)$
</IfModule>
<IfModule mod_expires.c> 加载mod_expires.c有效期模块
ExpiresActive on 打开有效期功能开关
ExpiresByType image/gif "access plus 1 days" 有效期1天
ExpiresByType image/jpeg "access plus 24 hours" 有效期24小时
ExpiresByType image/jpg "access plus 24 hours" 有效期24小时
ExpiresByType image/png "access plus 24 hours" 有效期24小时
ExpiresByType text/css "now plus 2 hour" 有效期2小时
ExpiresByType application/x-javascript "now plus 2 hours" 有效期2小时
ExpiresByType application/javascript "now plus 2 hours" 有效期2小时
ExpiresByType application/x-shockwave-flash "now plus 2 hours" 有效期2小时
ExpiresDefault "now plus 0 min" 有效期0分钟,不缓存
</IfModule>
ErrorLog "logs/ test.com -error_log" 错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog " | /usr/local/apache2.4/bin/ rotatelogs -l logs/test.com-access _ %Y%m%d.log 86400 " combined env= ! img
</VirtualHost> !取反,不记录变量所表示的文件访问记录,并将日志交由rotatelogs处理,以test.com-access_年月日.log格式保存,且每86400秒保存一次,86400秒=1天
保存退出

编辑配置文件httpd.conf,搜索expires
[root@aliyun ~]# vim /usr/local/apache2.4/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so 取消这行的注释

测试语法并重新加载配置
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#

测试访问:
[root@aliyun ~]# touch /data/wwwroot/ www.test.com/images/test. jpeg
我在日志记录规则里未排除 jpeg 类型元素的记录,但在有效期规则里设置了 jpeg 类型元素的有效期
[root@aliyun ~]# curl -x127.0.0.1:80 -I www.test.com/images/ test .jpeg
HTTP/1.1 200 OK 访问成功
Date: Thu, 31 May 2018 05:32:57 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Thu, 31 May 2018 05:14:03 GMT
ETag: "834c-56d7989261cc0"
Accept-Ranges: bytes
Content-Length: 33612
Cache-Control: max-age=86400 有效期1天
Expires: Fri, 01 Jun 2018 05:32:57 GMT
Content-Type: image/jpeg

[root@aliyun ~]# curl -x127.0.0.1:80 -I www.test.com/images/ test. jpeg
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 05:32:59 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Thu, 31 May 2018 05:14:03 GMT
ETag: "834c-56d7989261cc0"
Accept-Ranges: bytes
Content-Length: 33612
Cache-Control: max-age=86400
Expires: Fri, 01 Jun 2018 05:32:59 GMT
Content-Type: image/jpeg

[root@aliyun ~]# curl -x127.0.0.1:80 -I www.test.com// test.php
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 05:33:01 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
X-Powered-By: PHP/7.2.5
Cache-Control: max-age=0 有效期为0,即不缓存
Expires: Thu, 31 May 2018 05:33:01 GMT
Content-Type: text/html; charset=UTF-8

查看访问记录:

[root@aliyun ~]# tail -2 /usr/local/apache2.4/logs/test.com-access_20180531.log
42.26.188.33 - - [31/May/2018:13:16:35 +0800] 147 "GET /images/test.jpeg HTTP/1.1" 301 243 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
42.26.188.33 - - [31/May/2018:13:18:12 +0800] 128 "GET /images/test.jpeg HTTP/1.1" 301 243 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
由于我在默认虚拟主机的跳转规则里,将所有非www.test.com的域名指向全部跳转至www.test.com,所以会出现在浏览器访问不到的情况,状态码会显示301,注释掉虚拟机1的跳转规则即可

再次查看:
[root@aliyun ~]# tail -5 /usr/local/apache2.4/logs/test.com-access_20180531.log
127.0.0.1 - - [31/May/2018:13:32:57 +0800] 1150 "HEAD HTTP://www.test.com/images/ test.jpeg HTTP/1.1" 200 - "-" "curl/7.29.0"
127.0.0.1 - - [31/May/2018:13:32:59 +0800] 1083 "HEAD HTTP://www.test.com/images/ test.jpeg HTTP/1.1" 200 - "-" "curl/7.29.0"
127.0.0.1 - - [31/May/2018:13:33:01 +0800] 2421 "HEAD HTTP://www.test.com/ test.php HTTP/1.1" 200 - "-" "curl/7.29.0"
42.26.188.33 - - [31/May/2018:13:35:15 +0800] 224 "GET /images/test.jpeg HTTP/1.1" 200 33612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
42.26.188.33 - - [31/May/2018:13:35:19 +0800] 1069 "GET /images/test.jpeg HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
状态码 304 ,表示已缓存在远程客户端,即访问者的电脑,第一次访问的状态码为200,表示获取成功。



猜你喜欢

转载自blog.csdn.net/langyue919/article/details/80519945