4

我一直在使用清除实用程序,即。

squidclient -m PURGE http://www.example.com/

上面的命令将清除该确切链接,但会将其下的所有其他内容保留在缓存中。(例如http://www.example.com/page1)

我想知道有没有办法清除该网址下的每个文档?

4

6 回答 6

3

我在弄乱这条线时取得了有限的成功:

awk '{print $7}' /var/log/squid/access.log | grep www.example.com | sort | uniq | xargs -n 1 squidclient -m PURGE -s
于 2011-03-23T00:03:41.320 回答
2

首先感谢 KimVais 建议我在 serverfault 中提问,我在那里找到了解决方案。

如 serverfault 中的回答:

3rd-party purge 实用程序将完全按照您的要求执行:

清除工具是 squid-2 缓存中的一种放大镜。您可以使用 purge 查看缓存中的哪个文件中存储了哪些 URL。清除工具还可用于释放 URL 与用户指定的正则表达式匹配的对象。一个更麻烦的功能是删除文件的能力 squid 似乎不再知道了。

对于我们的加速(反向)代理,我使用如下配置:

purge -c /etc/squid/squid.conf -p localhost:80 -P0 -se ' http://www.mysite.com/ ' -P0 将显示 URL 列表但不会删除它们;将其更改为 -P1 以将 PURGE 发送到缓存,就像您在示例中所做的那样。

于 2010-02-24T13:05:35.940 回答
2

net-purge gem将Net::HTTP::Purge 添加到 ruby​​,因此您可以轻松清除缓存。

require 'net-purge'

Net::HTTP.start('417east.com') {|http|
  request = Net::HTTP::Purge.new('/')
  response = http.request(request)
  puts response.body # Guru Meditation
}
于 2011-06-13T21:01:58.553 回答
1

我想补充一点,没有O(1)方法可以使 Squid 缓存中的多个对象无效。有关详细信息,请参阅Squid 常见问题解答

相比之下,Nginx 和 Apache Traffic Server 似乎也缺少此功能。OTOH,Varnish 实现了banning,这在实践中应该做你想做的事。

于 2015-02-19T12:33:35.713 回答
0

我们有很多方法可以清除。我经常使用的示例 2 方式:

对于使用 MacOS 或 Linux 的客户端:

curl -X PURGE http://URL.of.Site/ABC.txt

直接在运行 Squid 的服务器上:

squidclient -m PURGE http://URL.of.Site/ABC.txt

绝对,squid.conf 必须添加

acl Purge method PURGE
http_access allow localhost Purge
http_access allow localnet Purge
http_access deny Purge
于 2015-01-10T15:10:30.510 回答
0

Apache Traffic Server v6.0.0 添加了一个“缓存生成 ID”,可以根据重映射规则进行设置。因此,您可以完全免费有效地清除整个“站点”,除了使旧版本不可用之外,它实际上并没有做任何事情。

这适用于 ATS 缓存,因为它是一个循环缓存(我们称之为旋风缓存),对象永远不会主动删除,只是“丢失”。

使用这个新选项相当简单,例如

map http://example.com http://real.example.com \
   @plugin=conf_remap.so \
   proxy.config.http.cache.generation=1

要立即(零成本)清除 example.com 的所有缓存条目,只需将生成 ID 设置为 2,然后以正常方式重新加载配置。

我还应该说,编写一个从我们的 remap.config 之外的其他(外部)源加载这些生成 ID 的插件将非常容易。

于 2015-06-26T02:45:51.507 回答