作者:沈建苗 本文选自:赛迪网 2002年12月16日
http://developer.ccidnet.com/pub/disp/Article?columnID=294&articleID=33680&pageNO=1
设想一条标准的128Kbps租用线路为200名员工提供服务,那么网络连接速度会慢得难以忍受,在高峰期间(如清晨或夜晚)更是如此。对如今面临财政困难的许多公司而言,升级租用线路方案恐怕可望不可及。因此,带宽管理成为一个重要问题。但由于许多MIS管理人员面临其它紧迫问题如网络安全、病毒防治和时常重新配置网络,这一问题仍然不为他们所注意。
然而,能否管理有限带宽以及即使使用有限带宽改善用户体验这很重要,而做到这点可能不是很难。虽然现在有商业化硬件解决方案如架装设备,但也有一些开放源代码解决方案,只须花一番功夫就有可能达到目的。其实,你甚至可以在桌面上将这些方案直接用作本地高速缓存服务器,以改善你自己的冲浪体验。
桌面Web高速缓存的优点在于,你所使用的任何Web浏览器都能使用缓存内容,而不是使用标准Web浏览器的高速缓存的浏览器特定的缓存内容。需要在不同Web浏览器上测试Web内容和性能的Web开发人员会充分认识到这项功能。
此外,这些开放源代码解决方案有一部分还会成为你制订内容过滤解决方案的基础,因为高速缓存意味着将远地的网络内容存放在本地,所以可以查询及分析任何本地内容。
寻找Squid
只须访问www.squid-cache.org,你就能找到所需要的东西。这儿有标准Red Hat Linux(这可能是安装最广泛的Linux版本之一)的PRM软件包,以及适用于像FreeBSD及其它Unix版本这些系统的编译代码。至于Mac OS X用户,也有一款程序使服务器和工作站可以运行Squid,因为OS X基于BSD Unix。
与任何Web服务器的服务一样,服务器硬件的效率和功能确实与服务器的服务性能直接有关。因此,如果你在采用英特尔芯片的硬件上运行Linux或FreeBSD,就要购买最快的CPU,最好装有多个处理器的,确保有可能获得异步输入/输出(I/O)。如果使用Mac OS X服务器,要确保服务器内采用了多个G4 CPU。
因为Squid严重依赖DNS的性能,你可以通过在Squid上运行DNS缩短等待时间,或者使用尽可能多的DNS服务器。DNS查询常常会减慢服务器的速度,有时负荷过重会使服务器陷于瘫痪,所以你需要指定5台以上的DNS服务器(最好多达20台)用于查询。
如果在使用IDE/ATA控制器,不要把两个驱动器连接到一个控制器上。然而,如果你的内部驱动器控制器是SCSI型,可以按雏菊链方式连接两个或多个驱动器,因为SCSI就是用来按雏菊链方式连接驱动器的。至于日志记录,不要放在高速缓存驱动器上,因为这会立即减弱高速缓存性能。使用与不同驱动器相连的不同控制器。
你可能希望使用装入到高速缓存服务器内的全部物理RAM,同时高速缓存尽可能小的对象。一旦Squid开始使用交换文件(swap file),性能就会立即衰减。
把两台单独的名字服务器连接到Squid高速缓存服务器上,用作本地名字服务器。这将确保Squid不会经常进行异地DNS查询,你同样可以使用两台单独的名字服务器用作本地的SMTP/POP3/IMAP DNS服务器。
立即启动Squid
找到$SQUID-HOME/etc/squid.conf,运行squid-z命令,以建立高速缓存目录结构。如果你看到一张长长的高速缓存目录列表,也用不着感到惊讶。显然,你需要一只大容量高速硬盘存放高速缓存目录。Squid.conf文件注释清晰,找到供你定制配置的参数应该比较容易。
例如,你首先要设置的其中一个参数是用于Web高速缓存的端口。切勿将端口80用于普通的Web高速缓存。公共设备和高速缓存机制通常会使用8080或3128等未用端口。此后你应通知每个下游用户,通过指定端口的高速缓存代理服务系统进行各种Web查询。
这也降低了对端口80的需求,而如果你不在本地运行httpd,还可以防止端口80扫描和拒绝服务(DoS)攻击。
对端口进行配置时,检查http_port、icp_port和htcp_port这些参数,为所有这些端口指定你打算使用的同一个端口。
要考虑的下一个参数是cache_mem,该参数设定了将多少内存分配给Squid。如果你利用常备的PC Linux或FreeBSD服务器运行Squid,那么可以给服务器增添尽可能多的RAM。
假定你有多达1GB的RAM(不是虚拟RAM),可能会分配多达128MB的cache_mem给Squid。然而,如果RAM只有256M或更少,那就逐步增加cache_mem的值(以8MB为递增单位),直到你对性能满意为止。
网站通常包含HTML和图形等对象。图形分为几种形式:PNG(可移植网络图形,这是一种新兴标准)、JPEG和GIF。由于专利性,GIF正逐渐被PNG所取代。
无论如何,Squid都能够把频繁请求的对象如HTML、JPEG和PNG保存在本地高速缓存服务器上,然后在请求对象的用户查询URL时提供给他们。
考虑到对象有的非常小(如1x1像素的GIF文件)、有的非常大(如用3.3兆像素相机拍摄的图片),限制Squid在分成类别的高速缓存目录上保存多大的对象就很重要。
通过maximum_object_size参数,你可以限制用户下载内容、Squid可以存储的对象大小。通常你会将该值设成大约40MB或更小。我认为,maximum_object_size的值最好不要设得过大,不然会减弱Squid系统的性能。
把visible_hostname设置成网络上完全符合标准的域名,譬如cache.mydomain.com,移去dns_testnames前面的注释符,以便Squid可以进行一些基本的域搜索,确保Squid运行正常。
如果测试域名无法加以解析,检查Squid是否配置正确,或者BIND DNS服务器是否工作正常。众所周知,有时由于负荷过重,使用BIND的本地DNS服务器会被攻破。而在这种情形下,硬件重启动也许很有必要。因此备有冗余DNS服务器确保连续解析和正常运行很重要。
Squid的访问控制
使用访问控制表(ACL)的话,你很容易编写规则,允许本地IP地址使用Squid,而拒绝其它所有地址的访问。例如,若要包含从1.2.3.0到1.2.3.255的IP地址范围,ACL可以写成:
acl our_network src 1.2.3.4/24
http_access allow our_network
http_access deny all
Squid的ACL采用自上而下的方式工作,这意味着它允许合法内部IP地址范围上的任何人都可以使用高速缓存器,但拒绝其它所有地址。如果你有远程用户,可能需要在"http_access deny all"参数前指定具体的内部IP地址范围。
让桌面使用Squid
如果你使用机器通常是用于Web演示,希望不用上网就能够演示Web内容,那么Squid可以有效地使用高速缓存内容用来演示。
然而,一项不常使用的功能(通过"offline_mode on"参数可以实现)确保Squid不会认可本地高速缓存的过时数据的有效性,你就可以方便地使用机器和高速缓存内容用于离线演示。至于较新版本的Squid,你可能需要打上补丁,以便运行Squid用于断续连接。
Squid 是Unix下最为流行的代理服务器软件,它功能强大,支持对HTTP,FTP,Gopher,SSL和WAIS等协议的代理;设置简单,只需对配置文件中稍稍改动就可使代理服务器运转起来。而且Squid具有页面缓存功能,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。