鱿鱼 StoreId 重写
Squid StoreId rewrite
我尝试配置我的代理来删除一些缓存文件的重复数据。
一些站点在 URL 末尾添加查询字符串,因此文件被多次缓存。例如:
- http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jre-7u75-linux-x64.tar.gz?AuthParam=kjzeghfhrehbfgjernf
- http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jre-7u75-linux-x64.tar.gz?AuthParam=jzehrguihegeijhpijf
我想像这样为 storeId 创建和重写规则:
^http:\/\/download\.oracle\.com\/otn\-pub\/java\/([a-zA-Z0-9\/\.\-\_]+\.(tar\.gz)) http://download.oracle.com/otn-pub/java/
但我还没有找到关于如何做到这一点的文档。
好的,经过长时间的研究,我找到了问题的答案。如果其他人有同样的问题,我写在这里。
首先,我安装了Squid 3.4,第一个版本支持StoreId重写。
二、阅读 StoreId 文档后:
- wiki.squid-缓存.org/Features/StoreID
- wiki.squid-缓存.org/Features/StoreID/DB
和很多 google 搜索我找到了这个 perl 程序 http://pastebin.ca/2422099。它以一个数据库文件作为第一个参数,你可以在第二个 link 之前找到例子。在文件中我有一行如上:
^http:\/\/download\.oracle\.com\/otn\-pub\/java\/([a-zA-Z0-9\/\.\-\_]+\.(tar\.gz)) http://download.oracle.com/otn-pub/java/
第三,在我的 squid.conf 中,我有这一行:
store_id_program /usr/local/squid/store-id.pl /usr/local/squid/store_id_db
store_id_children 5 startup=1
store_id_program 是 perl 文件的路径,参数是数据库文件。
store_id_children表示程序允许的子进程数,最多5个,开头1个。
在同一个 squid.conf 中,我替换了这一行:
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
来自
refresh_pattern -i cgi-bin 0 0% 0
允许使用查询字符串缓存 url。
最后,我确保 store-id.pl 有 'x' 权限
希望对您有所帮助:)
PS:只是一个技巧,在 db 文件中,您必须用制表符(而不是 space)分隔列。可以肯定的是,您可以使用此命令(在文档中找到):
cat dbfile | sed -r -e 's/\s+/\t/g' |sed '/^\#/d' >cleaned_db_file
我尝试配置我的代理来删除一些缓存文件的重复数据。 一些站点在 URL 末尾添加查询字符串,因此文件被多次缓存。例如:
- http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jre-7u75-linux-x64.tar.gz?AuthParam=kjzeghfhrehbfgjernf
- http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jre-7u75-linux-x64.tar.gz?AuthParam=jzehrguihegeijhpijf
我想像这样为 storeId 创建和重写规则:
^http:\/\/download\.oracle\.com\/otn\-pub\/java\/([a-zA-Z0-9\/\.\-\_]+\.(tar\.gz)) http://download.oracle.com/otn-pub/java/
但我还没有找到关于如何做到这一点的文档。
好的,经过长时间的研究,我找到了问题的答案。如果其他人有同样的问题,我写在这里。
首先,我安装了Squid 3.4,第一个版本支持StoreId重写。 二、阅读 StoreId 文档后:
- wiki.squid-缓存.org/Features/StoreID
- wiki.squid-缓存.org/Features/StoreID/DB
和很多 google 搜索我找到了这个 perl 程序 http://pastebin.ca/2422099。它以一个数据库文件作为第一个参数,你可以在第二个 link 之前找到例子。在文件中我有一行如上:
^http:\/\/download\.oracle\.com\/otn\-pub\/java\/([a-zA-Z0-9\/\.\-\_]+\.(tar\.gz)) http://download.oracle.com/otn-pub/java/
第三,在我的 squid.conf 中,我有这一行:
store_id_program /usr/local/squid/store-id.pl /usr/local/squid/store_id_db
store_id_children 5 startup=1
store_id_program 是 perl 文件的路径,参数是数据库文件。
store_id_children表示程序允许的子进程数,最多5个,开头1个。
在同一个 squid.conf 中,我替换了这一行:
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
来自
refresh_pattern -i cgi-bin 0 0% 0
允许使用查询字符串缓存 url。
最后,我确保 store-id.pl 有 'x' 权限
希望对您有所帮助:)
PS:只是一个技巧,在 db 文件中,您必须用制表符(而不是 space)分隔列。可以肯定的是,您可以使用此命令(在文档中找到):
cat dbfile | sed -r -e 's/\s+/\t/g' |sed '/^\#/d' >cleaned_db_file