2018.3.5 10周4次课

十周四次课(3月5日)

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

11.23 访问日志切割

11.24 静态元素过期时间

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

一个网站会有很多元素,尤其是图片、js、css等静态的文件非常多,用户每请求一个页面就会访问诸多的图片、js等静态元素,这些元素的请求都会被记录在日志中。如果一个站点访问量很大,那么访问日志文件增长会非常快,一天就可以达几GB这不仅对于服务器的磁盘空间造成影响,更重要的是会影响磁盘的读写速度。访问日志很重要,我们又不能不记录。还好这些巨量的静态元素请求记录到日志里意义并不大,所以可以限制这些静态元素去记录日志

  • 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录

在打开的网页上按F12,会出现如下的页面

默认定位Network,刷新后会出现很多页面的元素,每一行代表一个元素。每一行都是一个请求,每个请求都会记录访问日志。

  • 把虚拟主机配置文件改成如下:

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

#<Directory /data/wwwroot/111.com>

#<FilesMatch 123.php>

#   AllowOverride AuthConfig

#   AuthName "111.com user auth"

#   AuthType Basic

#   AuthUserFile /data/.htpasswd

#   require valid-user

#</FilesMatch>

#</Directory>

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

</IfModule>

ErrorLog "logs/111.com-error_log"

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

CustomLog "logs/111.com-access_log" combined env=!img

</VirtualHost>

先定义了一个image环境变量,把gif、jpg、png、bmp、swf、js、css等格式的文件全部归类到image里,后面的env=!image有用到一个“ !" 这相当于取反了,意思是把 image以外的类型文件记录到日志里。

分别加载jpg1和jpg格式

查询日志:tail /usr/local/apache2.4/logs/111.com-access_log

可以看到只记录了jpg1,没有记录jpg

上传一张baidu.php测试

日志里面没有:tail /usr/local/apache2.4/logs/111.com-access_log

11.23 访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件

打开虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

更改CustomLog这行配置为:CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

正常应该CustomLog后面为日志文件名,但在这里用了一个管道,它会把日志内容交给后面的rotatelogs命令处理。这个rotatelogs为httpd自带切割日志的工具,它会把访问日志按我们定义的文件名格式进行切割

-l:以当前系统的时间为基准,如果不指定就以UTC格式的时间为基准来切割(中国是CST,美国是UTC)

%Y%m%d :年月日

86400单位是“秒":相当于“一天"。

保存配置文件后,测试配置文件是否有错误,没有错误重新加载服务

用curl测试:curl -x127.0.0.1:80 111.com/123.php

11.24 静态元素过期时间

在上面的日志里,如果你观察地很仔细,会发现有一个状态码为304,这个状态码表示该文件已经缓存到用户的电脑里了,再次请求它的时候不用从服务器上下载,而是直接访问用户电脑里面的缓存。这样做的目的是降低服务器的资源消耗,还可以提升用户访问网站的速度。平时我们访问一个网站时,很多元素为静态的小图片,那这些小图片完全可以缓存在咱们的电脑里,这样再次访问该站点时,速度就会很快。

那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间"。在httpd的配置文件中,我们是可以控制这个时间的。

  • 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了,状态码为304
  • 编辑虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/abc.com"

ServerName abc.com

ServerAlias www.abc.com www.123.com

ErrorLog "logs/abc.com-error_log"

CustomLog "logs/abc.com-access_log" common

</VirtualHost>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

#<Directory /data/wwwroot/111.com>

#<FilesMatch 123.php>

#   AllowOverride AuthConfig

#   AuthName "111.com user auth"

#   AuthType Basic

#   AuthUserFile /data/.htpasswd

#   require valid-user

#</FilesMatch>

#</Directory>

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

</IfModule>

<IfModule mod_expires.c>

ExpiresActive on  //打开该功能的开关

ExpiresByType image/gif  "access plus 1 days"    //gif格式的文件过期时长为1天

ExpiresByType image/jpeg "access plus 24 hours"   //jpeg格式的文件过期时长为24小时

ExpiresByType image/png "access plus 24 hours"   //png格式的文件过期时长为24小时

ExpiresByType text/css "now plus 2 hour"   //css格式的文件过期时长为2小时

ExpiresByType application/x-javascript "now plus 2 hours"   //js格式的文件过期时长为2小时

ExpiresByType application/javascript "now plus 2 hours"    //js格式的文件过期时长为2小时

ExpiresByType application/x-shockwave-flash "now plus 2 hours"   //flash格式的文件过期时长为2小时

ExpiresDefault "now plus 0 min"  //其他文件过期时长为0,就是不缓存

</IfModule>

ErrorLog "logs/111.com-error_log"

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

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

</VirtualHost>

检测:/usr/local/apache2.4/bin/apachectl –t

  • 检查是否加载了expires模块:/usr/local/apache2.4/bin/apachectl -M |grep expires

没有任何输出,说明没有加载

编辑主配置文件:vim /usr/local/apache2.4/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so   //去掉行首的#

重新加载:/usr/local/apache2.4/bin/apachectl graceful

  • 使用curl来测试

可以看到cache-control:max-age=86400,php的图片将缓存86400秒。还有按理说既然有缓存,那我们请求该图片时状态码应该为304才对,但这里是200。这是因为我们使用curl工具来请求的,它并不像浏览器那样可以缓存这些文件,另max-age=0,说明没有缓存该类型的文件。

原文地址:http://blog.51cto.com/415326/2083066

时间: 2024-10-07 13:58:57

2018.3.5 10周4次课的相关文章

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example

2018.2.28 10周1次课

十周第一次课(2月28日) 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7 11.10/11.11/11.12 安装PHP5 关于PHP版本,目前大多企业都会使用5.4及更高版本,甚至越来越多的企业使用PHP7版本.7和5两个版本还是有很大差异的,据说7版本有很大的性能提升,但7版本还是太新了,很多企业的网站不一定能兼容.新事物取代旧事物是必然趋势,所以在后续的学习和工作中,建议你要与时俱进,敢于尝试.在本实验中,使用的PHP版本为5.6,PHP的官方下载地址为 :

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors

2018.1.16 6周2次课

六周第二次课(1月16日) 9.4/9.5 sed 9.4/9.5 sed 其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换.以前用vim操作文档的时候,可以查找也可以替换, 但只限于在文本内部操作,而不能输出到屏幕上.sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. sed  '/x/'p filename:匹配x字符 sed  -n  '/x/'p  filenam

2018.1.12 5周5次课

五周第五次课(1月12日) 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 8.10 shell特殊符号cut命令 1. 特殊符号 * 任意个任意字符 *代表零个或多个任意字符 ? 任意一个字符 ?只代表一个任意的字符 # 注释字符 表示注释说明,即#后面的内容都会被忽略 \ 脱义字符 这个字符会将后面的特殊符号 (如*) 还原为普通字符 | 管道符 这个字符前面曾多次出现过,它的作用是将前面

2018.1.29 8周1次课

八周一次课(1月29日) 10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍 10.23 linux任务计划cron 其实大部分系统管理工作都是通过定期自动执行某个脚本来完成的, 那么如何定期执行某个脚本呢? 这就要借助Linux的cron功能了 Linux任务计划功能的操作都是通过crontab命令来完成的, 其常用的选项有以下几个. -u:表示指定某个用户,不加- u选项则为当

2018.02.26 9周4次课

九周第四次课(2月26日) 11.1 LAMP架构介绍 11.2 MySQL.MariaDB介绍 11.3/11.4/11.5 MySQL安装 11.1 LAMP架构介绍 MySQL.MariaDB介绍 MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀) MySQL官网https://www.mysql.com  最新版本5.7GA/8.0DMR MySQL5.6变化比较大,5.7性

2018.4.25 18周1次课

十八周一次课(4月25日) 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.27 分发系统介绍 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答.它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. 我们熟知的shell编程功能虽然很强大,但是