老问题,什么是静态缓存?为什么配置静态缓存?
这里的静态文件指的是图片、 js、 css 等文件,用户访问一个站点,其实大多数元素都是图片、 js、 css 等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件不能一直缓存,它有一些时效性。
配置静态缓存的两种方法如下:
1. 通过mod_expires.c模块
打开mod_expires模块
vim /usr/local/apache2/conf/httpd.conf
找到
#LoadModule expires_module modules/mod_expires.so
将前面的#去掉,取消注释,加载模块
然后编辑虚拟主机配置文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在相应的虚拟主机配置中加入以下内容
<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 hour"
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>
配置分析:
老规矩,看下官方解释
This module controls the setting of the Expires HTTP header and the max-age directive of the Cache-Control HTTP header in server responses. The expiration date can set to be relative to either the time the source file was last modified, or to the time of the client access.
Expires Default base[plusnumtype[numtype]...
Expires ByType type/encoding "base[plus numtype] [numtype] ..."
where base is one of:
access
now(equivalent to 'access')
modification
The plus keyword is optional. num should be an integer value [acceptable toatoi()], and type is one of:
years,months,weeks,days,hours,minutes,seconds
所以呢,有两种格式,
第一种是
Expires Default
第二种是
Expires ByType
区别
1. Expires ByType可以通过微调,专门指定对哪种类型的文件设置缓存
2. 格式上的区别:ExpiresByTypetext 要加上要指定的类型
ExpiresDefault"access plus 1 month"
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
然后我们来看下文件的格式:
ExpiresDefault"access plus 1 month"
access是什么呢,代表的就是查看这些网页的时候,其他的选择还有
access 访问网页的时间
now 和access一个效果
modification 网页的修改时间
plus也就是字面意思,加上多久
后面的month代表时间,其他的选项还有以下内容,注意单复数哦
years,months,weeks,days,hours,minutes,seconds
还有一种写法:
ExpiresByTypetext/html M604800
M代表modification
A代表acess
后面跟的就是要增加的秒数
2. 通过mod_headers模块
具体配置如下
<ifmodule mod_headers.c>
<filesmatch "\.(html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch>
<filesmatch "\.(css|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch>
<filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
header set cache-control "max-age=29030400"
</filesmatch>
</ifmodule>
filematch就是匹配文件,后面的是正则表达式
header set cache-control "max-age=29030400"
这也没啥说的了,都是固定的语法
max-age=29030400指定的秒数
最后重启Apache即可
/usr/local/apache2/bin/apachectl graceful