我一直在使用清除实用程序,即。
squidclient -m PURGE http://www.example.com/
上面的命令将清除该确切链接,但会将其下的所有其他内容保留在缓存中。(例如http://www.example.com/page1)
我想知道有没有办法清除该网址下的每个文档?
我一直在使用清除实用程序,即。
squidclient -m PURGE http://www.example.com/
上面的命令将清除该确切链接,但会将其下的所有其他内容保留在缓存中。(例如http://www.example.com/page1)
我想知道有没有办法清除该网址下的每个文档?
我在弄乱这条线时取得了有限的成功:
awk '{print $7}' /var/log/squid/access.log | grep www.example.com | sort | uniq | xargs -n 1 squidclient -m PURGE -s
首先感谢 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 发送到缓存,就像您在示例中所做的那样。
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
}
我想补充一点,没有O(1)方法可以使 Squid 缓存中的多个对象无效。有关详细信息,请参阅Squid 常见问题解答。
相比之下,Nginx 和 Apache Traffic Server 似乎也缺少此功能。OTOH,Varnish 实现了banning,这在实践中应该做你想做的事。
我们有很多方法可以清除。我经常使用的示例 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
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 的插件将非常容易。