使用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链接
- Lighttpd mod_expires: http : //redmine.lighttpd.net/wiki/1/Docs : ModExpire
- Firefox的Live HTTP标头插件: https : //addons.mozilla.org/en-us/firefox/addon/live-http-headers/
- Debian: http : //www.debian.org/