使浏览器缓存静态文件与mod_expires在Apache2(Debian挤压)

使浏览器使用mod_expires缓存静态文件在Apache2(Debian Squeeze)

本教程将介绍如何配置Apache2以将日期中的静态文件(如图像,CSS和Javascript文件)的Cache-Control HTTP头的Expires HTTP头和max-age指令设置为日期,以便这些文件将被访问者的浏览器缓存。 这可以节省带宽,并使您的网站显得更快(如果用户第二次访问您的网站,静态文件将从浏览器缓存中获取)。 本教程是为Debian Squeeze编写的。

我不会保证这将为您工作!

1初步说明

我假设你的Debian Squeeze服务器上有一个工作的Apache设置,例如本教程所示: 在Debian Squeeze(LAMP)上安装Apache2与PHP5和MySQL支持

2启用mod_expires

可以启用mod_expires,如下所示:

a2enmod expires

之后重新启动Apache:

/etc/init.d/apache2 restart

3配置mod_expires

mod_expires配置可以放置在整个Apache服务器配置中,位于虚拟主机容器内,位于<Directory>指令内或.htaccess文件中。

在这个例子中,我将把它放在Apache的默认vhost中,它在Debian Squeeze中的/ etc / apache2 / sites-available / default中配置:

vi /etc/apache2/sites-available/default

如果您有多个文件类型在访问后的同一时间过期(假定在一周内),则可以使用FilesMatchExpiresDefault伪指令的组合,例如:

[...]
<IfModule mod_expires.c>
          <FilesMatch "\.(jpe?g|png|gif|js|css)$">
                      ExpiresActive On
                      ExpiresDefault "access plus 1 week"
          </FilesMatch>
</IfModule>
[...]

这将告诉浏览器将.jpg,.jpeg,.png,.gif,.js和.css文件缓存一周。

更改后重新启动Apache:

/etc/init.d/apache2 restart

您也可以使用ExpiresByType指令,并为每个文件类型分别设置Expires头(加上Cache-Control HTTP头的max-age指令),而不是使用FilesMatchExpiresDefault伪指令,例如:

[...]
<IfModule mod_expires.c>
          ExpiresActive on

          ExpiresByType image/jpg "access plus 60 days"
          ExpiresByType image/png "access plus 60 days"
          ExpiresByType image/gif "access plus 60 days"
          ExpiresByType image/jpeg "access plus 60 days"

          ExpiresByType text/css "access plus 1 days"

          ExpiresByType image/x-icon "access plus 1 month"

          ExpiresByType application/pdf "access plus 1 month"
          ExpiresByType audio/x-wav "access plus 1 month"
          ExpiresByType audio/mpeg "access plus 1 month"
          ExpiresByType video/mpeg "access plus 1 month"
          ExpiresByType video/mp4 "access plus 1 month"
          ExpiresByType video/quicktime "access plus 1 month"
          ExpiresByType video/x-ms-wmv "access plus 1 month"
          ExpiresByType application/x-shockwave-flash "access 1 month"

          ExpiresByType text/javascript "access plus 1 week"
          ExpiresByType application/x-javascript "access plus 1 week"
          ExpiresByType application/javascript "access plus 1 week"
</IfModule>
[...]

您可能已经注意到,我为JavaScript文件设置了三个ExpiresByType伪指令 - 这是因为每个服务器上的Javascript文件可能有不同的文件类型。 如果您只设置了一个文本/ javascript指令 ,但服务器将该Javascript文件识别为应用程序/ javascript ,则不会被您的配置覆盖,并且不会设置缓存头。

您可以在配置中使用以下时间单位:

  • 年份
  • 几个月
  • 几周
  • 小时
  • 分钟

请注意,Apache以单数和复数形式接受这些时间单位,因此您可以使用等。

可以组合多个时间单位,例如:

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

另请注意,如果您使用远未来的Expires标题,则只要组件更改,就必须更改组件的文件名。 因此,您的文件版本是个好主意。 例如,如果您有一个文件javascript.js并且要修改它,您应该添加一个版本号到修改的文件的文件名(例如javascript-1.1.js ),以便浏览器必须下载它。 如果您不更改文件名,浏览器将从缓存中加载(旧)文件。

而不是将Expires标题放在浏览器的访问时间(例如ExpiresByType image / jpg“ 访问 加60天” )中,您还可以将其设置在文件的修改日期( 请注意,这仅适用于真实文件存储在硬盘驱动器上! )通过使用修改关键字而不是访问权限

ExpiresByType image/gif "modification plus 7 days"

4测试

要测试您的配置是否有效,您可以安装Firefox的Live HTTP Headers插件,并通过Firefox访问静态文件(例如图像)。 在Live HTTP Headers输出中,您现在应该看到一个Expires头和一个带有max-age指令的Cache-Control头( max-age包含一个值,以秒为单位,例如604800是将来的一周):

5链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏