将网站静态资源内容,如jpg,gif,png,js,css文件,页面打开时自动缓存到本地,而不是每次都去从服务器请求资源,设置一定的缓存时间,这样做可以减轻服务器的带宽压力,同时使网页打开速度加快,提高用户体检。

宝塔面板如何配置静态文件缓存呢?下面我们一起来操作

加载mod_expires

1、先确认apache是否已经加载mod_expires

2、软件商店---->已安装---->Apache设置---->配置修改---->搜索mod_expires
宝塔7.1版默认已经加载了mod_expires模块(如果未加载的话,前面有一个#号,删除即可)

宝塔面板apache配置.png

配置伪静态

如图所示
伪静态设置.png
在伪静态下面添加mod_expires配置代码

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "now plus 2 hours"
    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"        
</IfModule>


保存文件之后,重新加载apache配置文件(或者重启一下apache)即可。
这样你的所有网站都添加了静态文件缓存,如果提示警告信息,请注意提示说明,解决对应问题即可
(我在操作过程中,有一个空网站没有配置文件目录,未重启成功,重新建立网站目录搞定)。

mod_expires说明

利用Apache模块mod_expires和mod_headers实现文件缓存,Add an Expires header|为文件头指定Expires大家在使用YSlow的网站速度优化,常会看到Add an Expires header这一条分值很低,搜索很多但还不知道怎么该。下面就是答案。Add an Expires header / 为文件头指定Expires

给静态文件加上过期标志。让浏览器或者CDN服务器缓存起来,加速图片和其他静态文件的加载。

Expires是浏览器Cache机制的一部分,浏览器的缓存取决于Header中的四个值: Cache-Control, Expires, Last-Modified, ETag。优化这个选项,所要做的是对站内所有的文件有针对性的设置Cache-Control和Expires.
我们要实现加上过期标志可以利用apache模块mod_expires和mod_headers。

通过配置.htaccess文件, 可以轻易地按文件类别设置缓存时间。对提高网站速度有一定帮助。

1. 利用mod_expires
在.htaccess中添加如下语句:
首先需要在/etc/apache2/httpd.conf导入模块

LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

2. 模块mod_expires设置:
允许通过配置文件控制HTTP的"Expires"和"Cache-Control"头内容
mod_expires 模块的主要作用是自动生成页面头部信息中的 Expires 标签和 Cache-Control 标签,从而降低客户端的访问频率和次数,达到减少不必要流量和增加访问速度的目的
mod_expires 是 apache 众多模块中配置比较简单的一个,它一共只有三条指令
ExpiresActive 指令:打开或关闭产生”Expires:”和”Cache-Control:”头的功能。
ExpiresByType 指令:指定MIME类型的文档(例如:text/html)的过期时间。
ExpiresDefault 指令:默认所有文档的过期时间。

过期时间的写法
“access plus 1 month”
“access plus 4 weeks”
“now plus 30 days”
“modification plus 5 hours 3 minutes”
A2592000
M604800
access、now及A 三种写法的意义相同,指过期时间从访问时开始计算。
modification及M 的意义相同,指过期时间是以被访问文件的最后修改时间开始计算。
所以,后一种写法只对静态文件起作用,而由脚本生成的动态页面不受它的作用

<ifmodule mod_expires.c>
    expiresactive on
    #默认所有文件缓存时间设置为300秒
    expiresdefault a300
    #html,plain-text缓存300秒
    expiresbytype text/html a300
    expiresbytype text/plain a300
    #css, javascript缓存一个小时
    expiresbytype text/css a3600
    expiresbytype application/x-javascript a3600
    #图标文件缓存30天
    expiresbytype image/x-icon a2592000
    #image类缓存一个星期
    expiresbytype image/jpeg a604800
    expiresbytype image/gif a604800
    expiresbytype image/png a604800
    #其它文件缓存一个星期
    expiresbytype application/x-shockwave-flash a604800
    expiresbytype video/x-flv a604800
    expiresbytype application/pdf a604800
</ifmodule>

配置实例:

ExpiresActive On(开启mod_expires功能)
ExpiresDefault "access plus 6 months"(默认的过期时间是6个月)
ExpiresByType image/* "access plus 10 years"(图片的文件类型缓存时间为10年)
ExpiresByType text/* "access plus 10 years"(文本类型缓存时间为10年)
ExpiresByType application/* "access plus 30 minutes"(application文件类型缓存30分钟)

但有一个问题是我们常用的Apache主机经常不怎么支持mod_expires,没有关系,我们用另一个模块使用mod_headers。
同样在.htaccess文件中添加如下内容可以实现缓存:

<ifmodule mod_headers.c>
    # htm,html,txt类的文件缓存一个小时
    <filesmatch “.(html|htm|txt)$”>
    header set cache-control “max-age=3600″
    </filesmatch>
    # css, js, swf类的文件缓存一个星期
    <filesmatch “.(css|js|swf)$”>
    header set cache-control “max-age=604800″
    </filesmatch>
    # jpg,gif,jpeg,png,ico,flv,pdf等文件缓存一年
    <filesmatch “.(ico|gif|jpg|jpeg|png|flv|pdf)$”>
    header set cache-control “max-age=29030400″
    </filesmatch>
</ifmodule>

以下为样本代码:

<FilesMatch “.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$”>
Header set Cache-Control “max-age=604800, public”
</FilesMatch>

<FilesMatch “.(xml|txt)$”>
Header set Cache-Control “max-age=18000, public, must-revalidate”
</FilesMatch>

<FilesMatch “.(html|htm|php)$”>
Header set Cache-Control “max-age=3600, must-revalidate”
</FilesMatch>

最后修改:2020 年 02 月 01 日
一分也是爱