Squid工作原理:
Squid 启动之后,会在 RAM 建立一个 Hash Table,记录硬盘中 object 配置的情形。
Squid 又会在 RAM 中建立一个 Digest Table(摘要表) ,其功能是和其他有合作关的 Squid (Sibling)互相交换 Digest Table,万一用户端想要的资料自己没有时,可以很快的知道哪一部 Squid Server 有资料(Squid 也可以透过 ICP 向其他 Squid 查询,但速度较慢)。但是 Digest Table 本身不小,既记忆体又频宽,如果 Server 的内存不够,对外带宽不够,反而比 ICP 查询更慢。
Squid的种类【可能不太合适叫做种类,不过没有更好的词。语文太差^_^】
child、sibling、parent。
关系如下:
Squid Server 之间的第一种关系是:Child 和 Parent。当 Child Squid Server 没有资料时,会直接向 Parent Squid Server 要资料,然後一直等,直到 Parent 给它资料为止。
Squid Server 之间的第二种关系是:Sibling 和 Sibling。当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要或上 internet 去拿。
一般 Squid Server 运作的模式是:
1. 当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要。
2. 向 Parent 要资料,然後一直等,直到 Parent 给它资料为止(Parent 自己有的资料或上 internet 去拿)。
3. 没有 Parent 时,就自己上 internet 去拿。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。
编译安装Squid:
./configure --prefix=/usr/local/squid[-ip] --enable-async-io=160 --enable-icmp --enable-kill-parent-hack --enable-cache-digests --enable-default-err-language=Simplify_Chinese --enable-poll && make && make install
--enable-async-io=160:这项主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器很强劲,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了(不要太贪心哦^_^)。
--enable-icmp:加入icmp。默认不加。
--enbale-kill-parent-hack:当kill掉nobody的squid进程的时候会同时杀死它的父进程。
--enable-cache-digests:【。。。】
--enable-default-err-language=Simplify_Chinese:当有错误的时候在页面中显示简体中文。【不过squid还是会无情的把所有语言都装上,看的不顺的话手工删咯】
--enable-poll:可以提升效能。
Squid的结构介绍:
安装好的目录在/usr/local/squid-10 (这里假设我的主ip最后一段是10)
结构是:
bin/:放置squid默认写好的启动脚本。有RunAccel;RunCache;squidclient;前2个启动Squid可以使用,因为当squid进程死了后,这个脚本可以自动检测到。 RunAccel是用于web 加速用的脚本,而RunCache是用于做squid代理用的,squidclient是用本机做squid测试的。
etc/:squid.conf在这个目录中
libexec/:函数库;
man/:帮助文件。不用说了吧。。。
sbin/ :squid命令所在目录。一般如果我用来测试就启动squid命令。或者用这个命令创建swap,或者加-k参数重启之类的操作。
share/ :一些错误显示的html都在里面;
var/ :log,pid,swap都在这个目录中!