标题:用Squid实现反向缓存代理 作者:陆培庆 写于:2004-8-11 最后更新时间: 2003-09-21 4:04 PM 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 前言: 这份文档主要说明用Squid实现反向缓存代理!而不是Squid最常用的代理服务器。当然原理差不多,无非反过来想而已^_^!基本的思想来源于对于新浪,网易这些大网站的一次探索,发觉他们前面都是用一堆Squid档着,然后后面才用Web Server,难怪可以抵挡那么高的流量,呵呵。详情请参阅我的另一篇文章: 中国顶级门户网站架构分析。 1. Squid工作原理: Squid
启动之后,会在 RAM 建立一个 Hash Table,记录硬盘中 object
配置的情形,也会在内存中存放最常用的资料(后面会介绍);同时Squid 又会在 RAM 中建立一个 Digest Table(摘要表)
,其功能是和其他有合作关系的 Squid (Sibling)互相交换 Digest
Table,万一用户端想要的资料自己没有时,可以很快的知道哪一部 Squid Server 有资料(Squid 也可以透过 ICP 向其他
Squid 查询,但速度较慢)。但是 Digest Table 本身不小,如果 Server 的内存不够,对外带宽不够,反而比 ICP
查询更慢。 2. 编译安装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 3. Squid的结构介绍: 安装好的目录在/usr/local/squid-10 (这里假设我的主ip最后一段是10) 4. Squid的配置介绍: 这里我不会详细一一介绍squid.conf中的每一项设置,只是一些重点。 squid.conf是对我来说也是唯一需要配置的一个配置文件。选项非常多,当然,默认的squid.conf文件中对于每一个选项都有比较详细的说明,但是我还是想把我理解的以及必须要进行配置的选项罗列出来,以免过段时间自己都忘了^_^ 以下的配置我是要向sina,sohu,163学习的web server的架构,试着自己去搭建一个这样的环境来看看效果到底如何。因此这里的squid不是用来做代理的,而是反向作为网站高速缓存。其实原理差不多,只是方向反一反而已,相信都能理解这点的。 使 用的测试服务器为Dell 2650 双CPU至强2.4G 内存DDR 2G。OS为Freebsd 5.2.1(这里需要说明的是,从实际使用情况来看,squid跑在freebsd上的效果是最快最好的。这是由os的文件系统所决定的,千万不能 用,solaris,感觉solaris的文件系统实在太慢,虽然非常稳定,而且跑多线程的效果是最好的。linux嘛~~~没有进行测试,不过感觉在 freebsd之下,solaris之上。) Squid.conf的几个重要参数的配置说明: http_port 61.155.143.54:80 #Squid Server侦听的端口。假设我的主页的dns server 指到61.155.143.54上的,因此我必须让squid来侦听这个IP的这个端口。 cache_mem 32 MB #要额外提供多少内存给squid使用,这里的额外是指squid会将最常用的一些缓存放到这块内存中。这个指令也是我看了官方文档后才理解的。因为一开 始从实际使用情况来看,我这边设32M的话,用top命令来查看一般会达到100M左右。这点让我让我很想不通,呵呵。然后就去看官方文档,发觉 squid是这样来计算使用多少内存的:squid本身的进程大概10M-20M,然后下面我设的cache目录的大小是500M的话,那他放在内存里的 hash索引大概需要20M左右,然后再加上这里设置的cache_mem的值。官方文档建议你的实际内存大小应该是这个squid所需要总内存的2倍以 上。自己量力而为吧。cache_mem当然是越大越好了。 cache_dir ufs /usr/local/squid-10/var/cache 500 16 256 #设置squid存放cache目录的位置以及大小。第一个数字500是指目录的总大小为500M(默认为100M),第二个数字16是指第一级目录为 16个,第三个数字256是指第二级目录为256个我个人觉得如果网站访问量大,并且内容很多的话,可以考虑将默认的100M改大一点,否则会报错。我就 经历过,错误我忘了记录了(该死!)大致就是说超过Max的极限了,当时查了半天才找到罪魁祸首是这条指令,惭愧~~~。 cache_access_log none cache_store_log none #我是将这些log记录都关了, 有需要的可以将它们打开。 acl managerIP src 10.10.10.10 http_access allow manager managerIP ipcanbrows localhost #加上2个允许就可以了。高深的配置我觉得我也不需要,用户可以访问就达到目的了:) httpd_accel_host virtual #由于我后面的apache server是基于ip来做虚拟主机的,因此这里需要设置成virtual。 httpd_accel_port 80 #http加速的端口,因为习惯等原因,还是将后面的apache server监听80端口。 httpd_accel_uses_host_header on #如果选了virtual的话,这里必须设置成on。 这里最多只列出了5%左右的选项,但是我配置的时候就只是用到了这些,因此,如果做网站加速的话,基本设置就是这些。当然需要更强劲的功能的话就需要好好读读squid的配置文件的文档了。 5. 最后的步骤: 1. 改变var目录的权限:chown -R nobody var 2. 创建缓存目录:sbin/squid -z 3. 启动squid:bin/RunAccel & (这边我使用squid附带的启动脚本来启动squid,有个好处就是,如果squid的进程死了的话,这个脚本会自动启动squid,对于运行在线上的服务器来说,这点太重要了)。 6. 一些使用体会: 1. squid使用时间长了,速度会变慢,我的建议是每2小时kill掉squid 进程,RunAccel脚本会自动再启动的它。 2. 写一脚本,放进crontab中,每天凌晨4点左右把cache目录清空。 #!/bin/sh 7. 参考资料: Squid官方网站: http://www. |
|