我一直在使用清除工具,即。
squidclient -m PURGE http://www.example.com/
上面的命令将清除该确切的链接,但它会将其中的所有其他内容保留在缓存中。 (eghttp://www.example.com/page1)
我想知道有没有办法清除该网址下的每个文件?
答案 0 :(得分:3)
我在这条线上的成功有限:
awk '{print $7}' /var/log/squid/access.log | grep www.example.com | sort | uniq | xargs -n 1 squidclient -m PURGE -s
答案 1 :(得分:2)
首先,感谢KimVais建议我在服务器故障中提问,我在那里找到了解决方案。
在serverfault中回答:
第三方清除实用程序将完全按照您的要求执行:
purge工具是您的squid-2缓存中的一种放大镜。您可以使用清除来查看缓存中哪个文件存储在哪个文件中。清除工具还可用于释放URL与用户指定的正则表达式匹配的对象。一个更麻烦的功能是能够删除鱿鱼似乎不再了解的文件。
对于我们的加速(反向)代理,我使用这样的配置:
purge -c /etc/squid/squid.conf -p localhost:80 -P0 -se'http://www.mysite.com/' -P0将显示URL列表但不删除它们;将其更改为-P1以将PURGE发送到缓存,就像在示例中一样。
答案 2 :(得分: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
}
答案 3 :(得分:1)
我想补充说,没有 O(1)方法可以使Squid缓存中的多个对象无效。有关详细信息,请参阅the Squid FAQ。
相比之下,Nginx和Apache Traffic Server似乎也缺乏此功能。 OTOH,Varnish实施banning,实际上应该做你想做的事。
答案 4 :(得分: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
答案 5 :(得分: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的插件非常容易。