访问日志不记录静态文件
网站的页面会有很多元素,尤其是图片,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,表示获取成功。