linux学习lesson44



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

猜你喜欢

转载自blog.csdn.net/InfiniteIdea_Go/article/details/84139815