十周四次课(3月5日)

时间:2021-11-30 14:23:43

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

  1. 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录。如果是使用chrome浏览器按下F12键会出现一个界面。默认会定位在network那一栏。再次刷新网页,在network下会出现很多的元素。很多的小图片没有必要去记录这些

  2. 在虚拟主机配置文文件中ErrorLog “logs/111.com-error_log”下加入以下内容

SetEnvIf Request_URI “.*\.gif$" img
SetEnvIf Request_URI “.*\.jpg$" img
SetEnvIf Request_URI “.*\.bmp$" img
SetEnvIf Request_URI “.*\.swf$" img
SetEnvIf Request_URI “.*\.js$" img //这里的img可以理解为标签
SetEnvIf Request_URI “.*\.css$" img
SetEnvIf Request_URI “.*\.png$" img
CustomLog "logs/111.com-access_log" common env=!img //env=!img表示将标签为img的全部排除,不用进行记录。

4 . 重新加载配置文件

5 . 上传一张.png格式的图片到111.com目录下,用浏览器或者curl命令去访问111.com下的那个图片,因为我们修改了虚拟主机的配置文件,将这种.png格式的静态文件不进行记录,那么访问日志中就不会记录这条信息。将配置文件中加入的 env=!img删除,重新加载配置文件后,再去访问那个图片就可以在访问日志中看到。

6 .这样操作的目的是因为这种静态文件太多,每一个请求都会记录这些访问,会严重消耗磁盘空间与磁盘IO ,浪费资源。


11.23 访问日志切割

  1. 日志一直记录总有一天会把磁盘写满,所以有必要让它自动切割,并删除老的日志文件
  2. 方法;
    A 将虚拟主机配置文件修改为如下

SetEnvIf Request_URI “.*\.gif$" img
SetEnvIf Request_URI “.*\.jpg$" img
SetEnvIf Request_URI “.*\.bmp$" img
SetEnvIf Request_URI “.*\.swf$" img
SetEnvIf Request_URI “.*\.js$" img //这里的img可以理解为标签
SetEnvIf Request_URI “.*\.css$" img
SetEnvIf Request_URI “.*\.png$" img

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" common env=!img //rotatelogs是htppd自带的日志切割工具,-l表示已当前系统的时间为基准,不指定会以UTC格式的时间去切割日志(国内CST ,美国UTC),%Y%m%d指定切割文件名自动生成。86400表示24小时


B。重新加载配置文件后,再使用curl命令去访问网站,之后可以看到在/usr/local/apachr/logs目录下生成一个带有当前日期的日志文件了。以后只要到了00:00时就会重新生成一个日志文件了。

C.做一个任务计划,将超过一定时间的文件删除掉,不进行这一步,那么只是将文件日志分割成了多个文件,还是会将磁盘写满,并不会对磁盘空间以及磁盘IO有任何帮助。


11.24 静态元素过期时间

  1. 我们在浏览器 上去访问我们网站上的新图片,那么可以看到显示的状态码是200,但是在刷新一次以后,状态码变为了304,这个状态码表示该文件已经缓存到了用户的电脑里了,再次请求它的时候不用再从服务器上下载,而是直接访问用户电脑中的缓存,这样做的目的是降低服务器的资源消耗,还可以提升用户访问的速度。如果服务器上的某个图片更改了,那么应该访问新的图片才行,这就涉及到了一个静态文件缓存时长的问题,也叫做缓存过期时间
  2. 在虚拟主机配置文件中增加如下内容
<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>

3 检查该模块是否已打开

/usr/loxal/apache2.4/bin/apachectl -M |grep expires 

如果没有,那么需要在apache主配置文件中去将该模块前面的#去掉,并重新进行加载。就可以查看到该模块了。

4.测试
ctrl+F5可以强制刷新,将本地缓存全部清空。

在执行curl命令访问图片后,从输出可以看到
DaTa;当前时间
Expires : 过期时间
cache-control:缓存多少秒

没有打开expires模块是查看不到这些信息的