Linux下的代理服务器软件很多,但是被广泛应用的只有Squid、socks、Apache等几个实践证明是高性能的代理软件。
一、各种代理服务器的比较
表-1Linux下主流代理服务器比较
Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。Squid支持以下协议:
客户端协议:HTTP、FTP、Gopher、WAIS、SSL
缓存及管理协议:ICP、CacheDigests、SNMP、HTCP
二、Squid工作原理和流程图
1.代理服务器的工作机制
代理服务器的工作机制很像我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。
2.squid工作流程
图1是Squid工作原理图。
图1Squid工作原理图
1.客户端计算机向代理服务器端发送一个数据需求封包;
2.代理服务器端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,那么代理服务器端会预计开始替客户端计算机获取信息。
3.代理服务器首先会到自己的硬盘里面,也就是所谓的cache(缓存)查看一下有没有客户端计算机端所需要的数据,如果有的话,那就将数据直接送到客户端计算机端,而不向互联网获取信息。
4.将数据传回给客户端计算机端使用。
5.在经过以上三部查寻知道缓存没有数据,或者数据过期之后,代理服务器会向互联网上面的目标网站要求数据;
6.在将数据取回之后,代理服务器会先将取得的数据储存一份到缓存当中。
7.最后才将数据传回给客户端计算机端使用。
三、安装和配置Squid服务器
通常说来,安装Squid有两种方法:一是从Linux发行版本中获取该软件的RPM包进行;二是安装从Squid的官方站点下载该软件的源码进行编译后安装。目前网上最新的稳定版本为squid-2.6.STABLE10,下面以前者为例进行介绍。首先要确认是否已经安装vsftpd可以使用以下命令查看:
[rpm-qsquid]
如果在系统安装时已经把squid安装上了,那么我们就可以直接对squid配置使用了。
也可以从Squid站点获取该软件的源代码安装包,包括gz和bz2两种压缩方式。
配置并保存好squid.conf后,可以用以下命令启动squid。
或者,使用RHEL4.0的启动脚本来启动squid。
/etc/rc.d/init.d/squidstart
同样,也可以用下列脚本停止运行squid或重启动squid。
/etc/rc.d/init.d/squidstop
/etc/rc.d/init.d/squidrestart
判断squid已经正常启动方法:分别使用ps命令和netstat命令检查Squid代理组服务器允许情况,和端口使用情况,见图-2。
图-2查看Squid服务器运行进程和端口
如果你的Linux服务器终端桌面出现图2类似的情况表示Squid代理服务器运行正常。
理解Squid配置文件
Squid配置文件由一组文件组成见表2。
其中最重要的是squid.conf,squid.conf配置文件可以分为十三个部分,这十三个部分分别是:
1)NETWORKOPTIONS(有关的网络选项)。
2)OPTIONSWHICHAFFECTTHENEIGHBORSELECTIONALGORITHM(作用于邻居
选择算法的有关选项)。
3)OPTIONSWHICHAFFECTTHECACHESIZE(定义cache大小的选项)。
4)LOGFILEPATHNAMESANDCACHEDIRECTORIES(定义日志文件的路径cache的目录)。
5)OPTIONSFOREXTERNALSUPPORTPROGRAMS(外部支持程序选项)。
6)OPTIONSFORTUNINGTHECACHE(调整cache的选项)。
7)TIMEOUTS(超时)。
8)ACCESSCONTROLS(访问控制)。
9)ADMINISTRATIVEPARAMETERS(管理参数)。
10)OPTIONSFORTHECACHEREGISTRATIONSERVICE(cache注册服务选项)。
11)HTTPD-ACCELERATOROPTIONS(HTTPD加速选项)。
12)MISCELLANEOUS(杂项)。
13)DELAYPOOLPARAMETERS(延时池参数)。
理解squid的命令启动参数
Squid有很多命令参数,见图-3。
图-3squid命令选项
对于Squid命令这里需要了解其参数,在开始其他事情之前,让我们先看一下squid的命令行选项。这里的许多选项你会经常使用,另外有些仅仅在调试问题时有用。
squid命令行选项
-aport:
指定新的http_port值。该选项覆盖了来自squid.conf的值。然而请注意,你能在quid.conf里指定多个值。-a选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a是因为在Harvestcache里,HTTP端口被叫做ASCII端口)。
-dlevel:
让squid将它的调试信息写到标准错误(假如配置了,就是cache.log和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1工作良好。
-ffile:
指定另一个配置文件。
-h:
显示用法。
-kfunction
指示squid执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,orparse。
+reconfigure导致运行中的squid重新读取配置文件。
+rotate导致squid滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。