Apache中的mod_expires缓存模块

11 篇文章 0 订阅

虽然我们之前通过mod_deflate模块启用了压缩,从很大程度上节约了企业带宽,降低了企业成本,可是由于现在越来越多的图片、脚本、Css和Flash被嵌入到页面中,当客户访问站点势必会做很多次的http请求,因此我们还可以通过mod_expries缓存模块来设置ExpiresHeader来缓存这些文件。

Expires是通过header报文来指定特定类型的文件在浏览器中的缓存时间的,平时,我们大多数的图片,flash在发布之后都是不需要经常修改的,做了缓存之后,浏览器第一次服务器下载之后,就不需要再从服务器下载这些文件而是直接从浏览器缓存中读取了,这样客户访问页面的速度就会大大加快,企业的宽带压力也得到了缓解。

一、检查mod_expires模块是否安装

[root@localhost ~]# /usr/local/apache/bin/apachectl -M | grep expires    #什么输出否没有,证明并没有安装;

所以需要安装mod_expires,安装的方式有两种:

a)编译方式安装

在安装Apache的时候,进行预编译阶段使用--enable-expirs即可实现安装

b)DSO方式安装

[root@localhost ~]# /usr/local/apache/bin/apachectl -M | grep expirs
[root@localhost ~]# cd /usr/local/src/httpd-2.4.16/modules/metadata/          #cd 到Apache源码包mod_expires所在目录下
[root@localhost metadata]# ls mod_expires.c 
mod_expires.c
[root@localhost metadata]# 

以DSO的方式编译安装到apache中:

[root@localhost metadata]# /usr/local/apache/bin/apxs -c -i -a /usr/local/src/httpd-2.4.16/modules/metadata/mod_expires.c 

三个小参数说明:

 

-c 此选项表明需要执行编译操作

-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录。

-a 此选项自动增加一个loadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。

 

安装了mod_expires.so之后进行以下权限设置:

[root@localhost metadata]# chmod 755 /usr/local/apache/modules/mod_expires.so 

 

 

注意如果我们是编译安装时候已经编译进去的,要先在Apache的配置文件中,解锁以下行,在进行操作,不然会报错!!

[root@localhost metadata]# vim /etc/httpd/httpd.conf

通过DSO的方式编译安装的,在apache的配置文件中,就自动将#号取消掉了,这个是由于 -a参数决定的!!

 

此时再检查缓存模块是否安装:

[root@localhost metadata]# /usr/local/apache/bin/apachectl -M | grep expires
 expires_module (shared)                          #安装的apache中已经存在了缓存模块

二、配置缓存

缓存的用法有三种,分别对全局、对目录、对虚拟主机    

对目录和对全局差不多,只是将配置放在目录模块下面,所以不进行记录,下面做对全局和对虚拟主机的实验;

1、对全局

对全局的配置就是在apache主配置文件httpd.conf的末尾加入如下参数即可

[root@localhost metadata]# vim /etc/httpd/httpd.conf


在末尾插入以下参数:

<IfModule mod_expires.c> 
ExpiresActive on                                                                            #缓存开启
    ExpiresDefault "access plus 12 month"                                     #缓存默认的时间12个月
    ExpiresByType text/html "access plus 12 months"                    #以下的都是针对各种类型做缓存
    ExpiresByType text/css "access plus 12 months"
    ExpiresByType image/gif "access plus 12 months"
    ExpiresByType image/jpeg "access plus  12 months"
    ExpiresByType image/jpg "access plus 12 months"
    ExpiresByType image/png "access plus 12 months"
    EXpiresByType application/x-shockwave-flash "access plus 12 months"
    EXpiresByType application/x-javascript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
</IfModule>

 

access = now =A  ===> 从访问开始到缓存失效时间     plus只是关键词,用来添加时间的,上面就是从访问开始到失效是12个月

modication = M ===> 从最后一次修改到缓存失效的时间

具体时间可以自定义: days  weeks  months  都可以!!

检测以下httpd.conf的语法:   如果出问题,有可能是windows往linux中复制的时候存在符号问题;手敲一遍就可以解决,

语法不存在问题,就直接重启;

  

 

然后使用本地浏览器去访问测试,查看缓存时间:如下

第一次访问:返回code 200;

刷新访问:服务端返回code 304,说明来自于缓存;并且查看到缓存时间12 个月!

 

将HTTP配置文件中html格式的修改成 3 days,来进行反复测试:

重启Apache服务,进行测试:如下  缓存时间已经变为 3 days;同理修改为 3 weeks 也是可以的;

 

2、对虚拟主机  

对虚拟主机的配置就是在apache的虚拟主机配置文件httpd-vhost.conf中添加如下参数即可

修改配置文件,如下

[root@localhost ~]# vim /etc/httpd/httpd.conf

DocumentRoot "/usr/local/apache/htdocs"    #需要将该行在配置文件中注释掉,因为这个是访问我们根路径的;

Include /etc/httpd/extra/httpd-vhosts.conf    #需要将虚拟主机的include调用开起来;

修改httpd-vhosts.conf文件;如下:

[root@localhost ~]# cd /etc/httpd/extra/
[root@localhost extra]# vim httpd-vhosts.conf 

 

[root@localhost extra]# mkdir -pv /www/html     #创建目录-P递归创建,-v显示创建过程

[root@localhost extra]# echo "<h1>www.zhanggeng.cn</h1>" > /www/html/index.html
# 编辑/www/html/index.html 文件

[root@localhost extra]# /etc/init.d/apachectl restart    #重启apache

测试在虚拟主机里是否生效:第一次访问返回code 200:

 

再次刷新,第二次访问:缓存时间 3 weeks ;和在虚拟主机部分设置的一样;

 

三、扩展:expires模块的语法

expires模块用到了ExpiresDefault和ExpiresByType两个指令,下面是这两个指令的语法。

ExpiresDefault   “<base>” [plus] {<num><type>}*"

ExpiresByType type/encoding "<base> [plus] {<num><type>}"

其中<base>的参数有三个:access、now(等价于access)、modification

access、now以及A

三种写法的意义相同,指过期时间从访问时开始计算

modification以及M

意义相同,指过期时间是以被访问文件的最后修改时间开始计算。

Plus关键字是可选的:

<num> 必须是整数,确保可以atoi()所接收。(atoi可以把字符串转换成长整型数)

<type>参数类型:years、months、weeks、days、hours、minutes、seconds

例如:下面3个指令都表示文档默认的有效期是一个月

ExpiresDefault “access plus 1 months”

ExpiresDefault “access plus 4 weeks”

ExpiresDefault “access plus 30 days”

有效期可以通过增加 “<num><type>” 子句进一步调整

ExpiresByType text/html “access plus 1 month 15 days 2 hours”

ExpiresByType image/gif “modification plus 5 hours 3 minutes”

缓存优化对企业来说是至关重要了的,不同的业务类型,对于缓存的类型和时间又各不相同,大家具体可以对

淘宝、京东、新浪、谷歌等站点进行测试,看看他们的缓存时间是多少,并思考下为什么那样设置?

 

一般来说,图前的缓存时间设置时间长一点,对于文字的缓存略少;

 

缓存的设置有如下优点:

1、缩短服务的响应时间

2、减轻服务器负担

3、减少网络带宽使用量,降低企业成本

但是他的缺点也是显而易见的,由于使用了缓存设置,导致被缓存的内容更新了,但是客户看到的却还是旧的;

 

如何解决被缓存文件及时更新这个问题呢?

第一种:缩短缓存时间,根据情况,不一定要过短

第二宗:对缓存的对象改名;

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值