Lighttpd:设置 Cache-Control:public、max-age 标头用于缓存目的
您可以使用 lighttpd 网络服务器发送以下以及许多其他类型的缓存控制标头:
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | Lighttpd |
预计阅读时间 | 3 分钟 |
max-age=number-of-seconds:指定表示被视为新鲜的最大时间量。
must-revalidate:强制缓存遵循您提供的有关对象的任何新鲜度信息。
proxy-revalidate:与相同must-revalidate,只是它仅适用于代理缓存。
所有上述指令都会影响以下网络缓存:
- 您的网络浏览器,例如 Firefox 等。
- 网关和 CDN 网络,例如 Cloudfront、Akamai 等。
- 代理服务器和反向代理服务器,例如 squid、nginx 等。
示例:mod_expire 和 mod_setenv
mod_expire用于设置Lighttpd Web 服务器下 HTTP/1.0 和 HTTP/1.1 消息的响应标头中的Expire 和 Cache-Control: max-age 标头。mod_setenv模块允许影响外部应用程序生成的环境以及服务器发送给客户端的响应标头。
编辑 lighttpd.conf 文件,输入:
# vi lighttpd.conf
激活 mod_expire 和 mod_setenv:
server.modules = ( "mod_expire", "mod_setenv", "mod_redirect", "mod_rewrite", "mod_compress", "mod_access", "mod_auth", "mod_fastcgi", "mod_secdownload", "mod_accesslog", "mod_geoip" )
例如,默认情况下,使存储在 /images/ 中的所有图像在访问后 1 个月过期:
expire.url = ( "/images/" => "access plus 1 month" )
语法如下:
<access|modification> plus <number> <years|months|days|hours|minutes|seconds>
要使存储在 server1.example.com 子域中的所有图像默认在访问 1000 天后过期:
$HTTP["url"] =~ "^/" { expire.url = ( "" => "access 1000 days" ) }
要向 HTTP 请求添加公共标头,请输入:
setenv.add-response-header += ( "Cache-Control" => "public" )
要将 public 和 must-revalidate 添加到 HTTP 请求,请输入:
setenv.add-response-header += ( "Cache-Control" => "public, must-revalidate" )
我的设置中的工作示例
### config for static assets by example for example.com ### $HTTP["host"] == "s0.example.org"{ server.document-root = "/var/www/static-files" accesslog.filename = "/var/log/lighttpd/s0.example.org.log" $HTTP["url"] =~ "^/" { expire.url = ( "" => "access 5000 days" ) } setenv.add-response-header += ( "Cache-Control" => "public, must-revalidate, proxy-revalidate" ) }
保存并关闭文件。重新加载或重启 lighttpd网络服务器:
# service lighttpd restart
或者
# service lighttpd reload
如何查看和测试 HTTP 标头?
语法是:
curl -I http://static.example.com/images/file.png curl -I http://www.example.com/test.html
在此示例中,检查名为 http://www.example.com/media/images/category/old/light_logo/logo.png 的 URL 的 HTTP 资源,以了解它们如何与 Web 缓存交互:
curl -I http://www.example.com/media/images/category/old/light_logo/logo.png
示例输出:
HTTP/1.0 200 OK Content-Type: image/png Content-Length: 8852 Connection: keep-alive Server: nginx Date: Fri, 09 Nov 2012 10:06:32 GMT X-Whom: l3-com-cyber Cache-Control: public, must-revalidate, proxy-revalidate, max-age=432000000 Expires: Sun, 19 Jul 2026 10:06:32 GMT Accept-Ranges: bytes ETag: "732144214" Last-Modified: Wed, 14 Jan 2009 18:47:39 GMT Age: 15 X-Cache: Hit from cloudfront
#1:理解Date: Fri, 09 Nov 2012 10:06:32 GMThttp web 缓存标头
- s0.example.org 服务器发送的日期,即服务器的时钟。
- 时钟用于计算资源的新鲜度。
#2:理解Last-Modified: Wed, 14 Jan 2009 18:47:39 GMThttp web 缓存标头
- 该资源最后一次更改是在大约 3.5 年前。
#3:理解Cache-Control: public, must-revalidate, proxy-revalidate, max-age=432000000http web 缓存标头
- 该服务器允许所有缓存存储此图像文件(公共)。
- 该图像文件将保持新鲜状态,直至 13.5 年以后 (max-age=432000000)。
- 一旦该图像文件过期,缓存就无法提供该文件(必须重新验证、代理重新验证)。
#4:理解Age: 15http web 缓存标头
- 该图像文件已缓存15秒。