Varnish是一款高性能的HTTP缓存服务器,用于加速网站的内容加载速度。Varnish缓存清除,也称为缓存刷新或缓存淘汰,是管理Varnish缓存内容的重要环节,确保内容更新能够及时反映到用户面前。本教程将详细介绍Varnish的两种主要缓存清除方法以及通过管理端口执行的Purge命令。
1. **强制过期(Forced Expiry)**
强制过期是一种通过设置缓存对象的TTL为0秒来立即使其失效的方法。这使得Varnish在下次请求该对象时不再返回缓存版本,而是重新从后端服务器获取新鲜数据。在VCL(Varnish Configuration Language)中,你可以定义一个权限控制列表(acl)来指定哪些IP可以执行Purge操作,然后在`vcl_recv`、`vcl_hit`和`vcl_miss`子例程中处理Purge请求。例如,下面的代码允许本地主机和特定IP执行Purge:
```vcl
acl purge {
localhost;
192.0.2.14;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
lookup;
}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
}
```
2. **Purge_URL**
这种方法允许你根据URL来清除特定的缓存项。同样需要在VCL中配置,但这里的Purge请求会针对URL进行匹配。例如:
```vcl
acl purge {
localhost;
192.0.2.14;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
purge(req.url == req.url);
}
}
```
如果你需要支持正则表达式匹配URL,可以修改`purge`语句,如下所示:
```vcl
purge(req.url ~ "regex_pattern");
```
3. **管理端口Purge命令**
除了VCL中的配置,你还可以通过连接到Varnish的管理端口(默认为6000或3500)并执行特定的CLI命令来清除缓存。例如,对于Varnish 2.1,你可以使用以下命令:
```
telnet 192.168.1.185 3500
purge.url regex_pattern
```
管理端口提供了多个与Purge相关的命令,包括`purge.url`(根据URL清除)和`purge.field`(根据特定的HTTP字段清除)。你可以使用`help`命令查看所有可用的命令和选项。
注意,正确配置Varnish的Purge功能至关重要,因为误用可能会导致不必要的缓存清除,影响性能。同时,确保只有授权的客户端能执行Purge操作,以防止未经授权的数据暴露。
通过理解这些方法,你可以根据需要有效地管理Varnish缓存,确保用户始终获取最新、最准确的内容。在实际部署中,根据具体需求选择合适的缓存清除策略,并监控其效果,以优化Varnish的性能和响应性。