1. mod_expires模块介绍
1.1 mod_expires介绍
mod_expires允许通过apache配置文件控制HTTP的”Expires:”和”Cache-Control:”头内容,这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期可以设置为相对于源文件的最后修改时刻或客户端的访问时刻。
这些HTTP头向客户端表明了内容的有效性和持久性。如果客户端本地有缓存,则内容就可以从缓存而不是从服务器读取。然后客户端会检查缓存中的副本,看看是否过期或者是小,已决定是否从新从服务器获得内容更新。
1.2模块安装方法
常规安装方法:
(1) 编译时可加入如下参数:
--enable-expires
(2) mod_expires DSO安装方法
cd /root/tools/httpd-2.2.25/modules/metadata ç切到apache软件目录mod_expires程序下 #这个是解压软件包的路径 /application/apache/bin/apxs -c -i -a mod_expires.c ç以dso的方式编译到apache中 ll /application/apache2.2.25/modules/mod_expires.so ç检查mod_expires |
(3) mod_expires DOS安装出错一例
注意:如果使用.config的方式编译了mod_expires,又以DSO的方式安装mod_expires模块,检查apache的雨法会出现如下报错提示:(可以在httpd.conf文件中,注释该模块)
[[email protected] metadata]# /application/apache/bin/apachectl -t
httpd: Syntax error on line 54 of /application/apache2.2.25/conf/httpd.conf: module expires_module is built-in and can‘t be loaded
1.3 mod_expires在apache中的应用
[[email protected] extra]# cat httpd-vhosts.conf--- NameVirtualHost *:80 NameVirtualHost *:8091 NameVirtualHost *:8092 #<VirtualHost *:80> #DocumentRoot "/var/html/tmp" #</VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/blog" ServerName blog.etiantian.org ServerAlias etiantian.org ErrorLog "/app/logs/blog-error_log" #CustomLog "/app/logs/blog-access_log" common CustomLog "|/usr/local/sbin/cronolog /app/logs/access_blog_%w.log" combined ExpiresActive on ExpiresDefault "access plus 12 month" 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 plus12 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" #这一串代码可以加在httpd.conf文件的最后,也可以加在httpd-vhost.conf文件中虚拟主机配置的后面 <ifmodule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE text/css </ifmodule> </VirtualHost> <VirtualHost *:8091> ServerAdmin [email protected] DocumentRoot "/var/html/bbs" ServerName bbs.etiantian.org ServerAlias etiantian.org ErrorLog "/app/logs/bbs-error_log" # CustomLog "/app/logs/bbs-access_log" common CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%w.log" combined </VirtualHost> |
使用curl -I URL的方式查看该文件的过期时间
1.4 生产环境mod_expire优点
(1) 提升用户体验
(2) 节约网站带宽成本
(3) 节约网站服务器及维护成本
1.5 expires失效条件
(1) 用户主动清空缓存
(2) 设置的缓存时间到期
1.6 控制expires方法
如果网站更新功能或更新文件后,用户再访问时的内容还是旧的,怎么解决这个问题
解答:
1) 首先,对于大多数公司业务来说,图片等资源一般很少会去修改,因此可以修改为10年
2) 对于js,css偶尔会变化的资源,一般expires设置时间比较短,比如1-30天
3) 在更新文件上采取策略,如,更新后以新的文件名发布
2 mod_deflate模块介绍
mod_deflate模块提供了DEFLATE输出过滤器,允许服务器在将输出内容在发送到客户端之前进行压缩,以节约带宽。
两种安装方式:
- 静态编译,即在编译的时候加上--enable-deflate(bin/apachectl -l 查看是否安装)
- 以DSO的方式执行安装(bin/apachectl -M查看是否安装)
只需要把下面的配置复制到http.conf结尾保存,即可让所有的虚拟主机生效
<ifmodule mod_deflate.c> DeflateCompressionLevel 9 #压缩的等级,越大压缩等级越高,消耗CPU越高 SetOutputFilter DEFLATE #启用压缩 AddOutputFilterByType DEFLATE text/html text/plain text/xml #这三行设置压缩类型 AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE text/css </ifmodule> 同样适用curl -I URL的方式查看,还可以使用firefox插件查看 |