使浏览器缓存静态文件使用mod_expire On Lighttpd(Debian Squeeze)

使用Mod_expire创建浏览器缓存静态文件在Lighttpd(Debian Squeeze)

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

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

1初步说明

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

2启用mod_expire

您*可以*使用命令lighty -enable-mod expire启用mod_expire,但是这不能控制加载Lighttpd模块的顺序,并且如http://redmine.lighttpd.net/wiki/上的“疑难解答”部分所述。 1 / Docs:ModExpire ,强烈建议在所有其他模块之前加载mod_expire。

因此我们打开/etc/lighttpd/lighttpd.conf ...

vi /etc/lighttpd/lighttpd.conf

...并添加mod_expire作为server.modules节中的第一个模块:

server.modules = (
        "mod_expire",
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)
[...]

之后重新启动Lighttpd:

/etc/init.d/lighttpd restart

3配置mod_expire

mod_expire配置可以放置在整个Lighttpd服务器配置中或虚拟主机容器内。

在这个例子中,我将把它放在整体服务器配置中(即,这个配置对所有vhosts都是活动的):

vi /etc/lighttpd/lighttpd.conf

在Lighttpd上, Expires标头是根据文件所在目录而不是文件类型设置的(这与Apache不同)。 例如,有效的mod_expire配置将如下所示:

[...]
expire.url = ("/images/" => "access plus 7 days", "/jquery/" => "access plus 2 weeks", "/js/" => "access plus 2 months", "/misc" => "access plus 1 days", "/themes/" => "access plus 7 days", "/modules/" => "access plus 24 hours")
[...]

在上面的示例中, / images /目录(及其子目录)中的所有文件将在浏览器访问时间内获得日期7天的Expires标头。 因此,您应该确保在expire.url指令中列出的目录实际上只包含可由浏览器缓存的静态文件。

更改后重新启动Lighttpd:

/etc/init.d/lighttpd restart

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

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

请注意,您必须以复数形式使用这些时间单位,否则Lighttpd将拒绝启动。 所以你不能使用访问加1天 ,而是访问加1天 (这也不同于Apache,允许单数和复数)。

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

"access plus 1 months 15 days 2 hours"

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

您可以根据文件的修改日期( 请注意,这仅适用于存储在文件中的真实文件 ),而不是将Expires头部设置为浏览器的访问时间(例如 访问 加上60天” ), 硬盘驱动器! )使用修改关键字而不是访问

"modification plus 7 days"

也可以将mod_expire规则包含在一个条件中,例如:

[...]
	  $HTTP["url"] =~ "^/images/" {
         expire.url = ( "" => "access plus 1 hours" )
}
[...]

这告诉Lighttpd将一个Expires标头添加到URL以/ images /开头的所有文件(如https://www.youcl.com/uploads/images/subdir/1.png )。

4测试

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

5链接

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

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

支付宝扫一扫打赏

微信扫一扫打赏