Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。
squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。Squid与Linux下其它的代理软件如Apache、Socks、TIS FWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高性能的同时能够无缝的访问Internet。Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。优点对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI硬盘,处理器要求不高,400MH以上即可。Squid应用代理服务器原理代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。客户端B向代理服务器提出相同的请求。代理服务器也首先与访问控制列表中的访问规则相对照。如果满足规则,则将缓存中的信息传送给客户端B以下是一些squid的基本配置参数解释http_port 3128 //设置监听的IP与端口号cache_mem 64 MB //设置内存缓冲的大小cache_dir ufs /var/spool/squid 2000 16 256//设置硬盘缓冲大小cache_effective_user squid //设置缓存的有效用户cache_effective_group squid //设置缓存的有效用户组dns_nameservers 192.168.0.254 //设置DNS服务器地址,一般可以不设置,默认使用服务器自己设置的dnscache_access_log /var/log/squid/access.log //设置访问日志文件cache_log /var/log/squid/cache.log //设置缓存日志文件visible_hostname 192.168.0.20 //设置squid主机名称以上全局参数根据你自己的需要修改其实linux下的服务器配置文件最好就是squid,它对每个参数都有解释,而且有很多很多的实例Acl的访问控制列表语法语法:acl 列表名称 列表类型 [-i] 列表值列表名称:用于区分Squid的各个访问控制列表,任何两个访问控制列表不能用相同的列表名。虽然列表名称可以随便定义,但为了避免以后不知道这条列表是干什么用的,应尽量使用有意义的名称,如badurl、clientip和work time等。列表类型:是可被Squid识别的类别。Squid支持的控制类别很多,可以通过IP地址、主机名、MAC地址和用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口和URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理-i选项:表示忽略列表值的大小写,否则Squid是区分大小写的。列表值:针对不同的类型,列表值的内容是不同的。例如,对于类型为src或dst,列表值的内容是某台主机的IP地址或子网地址;对于类型为time,列表值的内容是时间;对于类型为srcdomain和dstdomain,列表值的内容是DNS域名。常用调试命令1、初始化你在 squid.conf 里配置的 cache 目录#/usr/sbin/squid -z //第一次启动squid服务时必须输入此命令如果有错误提示,请检查你的 cache目录的权限。2、对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。#/usr/sbin/squid -k parse如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。3、在前台启动squid,并输出启动过程。#/usr/sbin/squid -N -d1如果有到 ready to server reques,恭喜,启动成功。然后 ctrl + c,停止squid,并以后台运行的方式启动它。4、启动squid在后台运行。#/usr/sbin/squid -s这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。5、停止 squid#/usr/sbin/squid -k shutdown这个不用解释吧。6、重引导修改过的 squid.conf#/usr/sbin/squid -k reconfigure这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让运行中squid重新按照你的squid.conf 来运行。7、把squid添加到系统启动项编辑 /etc/rc.d/rc.local添加如下行: /usr/local/squid/sbin/squid -s当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。再来点其他的。1、修改cache 缓存目录的权限。#chown -R squid:squid /home/cache我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。2、修改squid 日志目录的权限#chown -R squid:squid /usr/local/squid/var/logs这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。例如生成 access.log cache.log store.log3、查看你的日志文档。#more /usr/local/squid/var/logs,/access.log | grepTCP_MEM_HIT该指令可以看到在squid运行过程中,有哪些文件被squid缓存到内存中,并返回给访问用户。#more /usr/local/squid/var/logs/access.log |grepTCP_HIT该指令可以看到在squid运行过程中,有哪些文件被squid缓存到cache目录中,并返回给访问用户。#more /usr/local/squid/var/logs/access.log |grepTCP_MISS该指令可以看到在squid运行过程中,有哪些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。关于 TCP_XXXX 等参数及代表的信息,请参看彭勇华《squid中文权威指南》13.2.1 章节。当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名,同样可以看到access.log里关于该域名的行。4、squid -k rotate 轮换squid的日志文件/var/log/squid,Squid代理服务器日志文件的增长速度是惊人的,很容易点球满磁盘空间导致系统不能正常工作,甚至是死机.为了解决日志文件增长太快的问题,squid采用了"轮换"的方法.在squid.conf中可以通过logfile_rotate来设置文件轮换的个数,如:logfile_rotate 10 ,轮换的工作一般用crontab定时器完在周期性的日志轮换,例如每周六凌晨2:00进行日志轮换,则执行如下命令: crontab -e0 2 * * 6 squid -k rotate