LAMP架构(六)

  • 来源:新网
  • 更新日期:2018-03-09

摘要:摘要: 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 扩展 apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960 apache只记录指定URI的日志 http://ask.apelearn.com/question/981 apache日志记录客户端请求的域名 http://a

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

使用场景:一个网页的很多静态图片、css/js文件,如果记录到日志中会使日志特别大,但这些图片文件等属于静态文件,没有记录的必要,因此我们可以修改配置文件设置不记录指定的类型的访问日志;我们日常需要的是看用户访问过哪些页面,而不是看这些页面的哪些图片

1、修改虚拟主机配置文件

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在文件中CustomLog行上方加入以下内容:

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

上面命令中引号内容是正则表达式,img属于前述内容的标记

再在CustomLog行末尾加入内容env=!img ,表示只要符合上面条件的请求都不会记录到日志里

2、重新加载配置文件

在重新加载前,配置文件还未生效,我们先来实验看下

从上图我们可以看到在未配置的情况下,默认是会记录jpg文件的访问日志的

下面我们来加载更新后的配置文件

#/usr/local/apache2.4/bin/apachectl -t

#/usr/local/apache2.4/bin/apachectl graceful

此时再来测试

上图可以看到并未增加新的日志记录

当然上面实验的图片并非真实存在的,我们也可以放一张真实存在的图片来访问实验,从本机传输huawei.jpg

现在我们再来访问新放进来的这张图片,发现并没有记录日志

二 访问日志切割

目的:一般情况下,都应该对日志做切割,一方面是防止日志写满磁盘,二是让我们更方便的管理日志,需要配合日志过期时间使用

 

1、编辑配置文件

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

加入下图框中的内容

|/usr/local/apache2.4/bin/rotatelogs 指定日志切割工具,rotatelogs这个工具是apache2.4自带的日志切割工具

-l 表示以系统的时间为准,如果不指定,它就会以UTC/CST(美国时间/中国时间)格式的时间为基准

%Y%m%d 表示年月日

86400 表示切割间隔时间为86400s,即1分钟

2、重新加载配置文件

# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful

3、访问查看下

从上图可以看到,在经过一次访问后,logs目录下新增了一个以今天时间命名的日志文件,其内容就是

刚才访问留下的日志

三 静态元素过期时间

设置静态元素过期时间后,当用户访问某个静态元素超过一定时间,浏览器就会自动将下载到本地的这些静态元素清空,如果不设置,可能不会清空,或者浏览器按照自己的设定来清空

先来做个小测试:

浏览器第一次访问下图连接,返回状态码为200 OK

浏览器第二次访问同一连接,返回状态码为304 Modified没有修改,它表示浏览器检测到所访问的这个图片从下载后到现在没有修改过,因此不需要从服务器重新下载

1、增加配置

在虚拟主机配置文件中加入以下内容:

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

ExpiresActive on表示打开此功能

ExpiresByType表示类型

ExpiresDefault表示其他类型文件的过期时间

now plus 0 min表示不过期或者不理会过期时间

2、检测配置文件语法错误

# /usr/local/apache2.4/bin/apachectl -t

3、查看expire模块是否开启

# /usr/local/apache2.4/bin/apachectl -M |grep expire

上图表示没有打开,此时需要编辑主配置文件打开expire模块

# vim /usr/local/apache2.4/conf/httpd.conf

去掉expires模块前面的#号,如下

重新加载配置文件

# /usr/local/apache2.4/bin/apachectl graceful

再来查看expire模块已经开启

4、验证

刷新原来的网页,可以看到状态码为200 O,K,缓存保留时间为1天,过期时间,

再次刷新网页,状态码及过期时间发生了变化,缓存保留时间还是1天