当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 搭建一个大型网站架构的实验环境(Squid缓存服务器篇)

Linux服务器
linux下用cron定时执行任务的方法
.htaccess绑定域名到子目录的方法
linux apache下虚拟主机配置方法
apache 局域网访问配置方案
linux Apache服务器系统安全设置与优化
linux中mac地址绑定方法
linux托盘不断闪烁之解决方法
Apache配置 虚拟转向实例
Apache No space left on device的解决办法
Apache rewrite的重写相关的参数说明
LINUX入门级常用命令20条整理
Ubuntu设置开机自动挂载所有格式硬盘分区
5个可能被你忽略的Linux安全设置方法
学习Apache的mod rewrite、access写法
改版时保留原链接,创建新的URL的方法
rsync中文手册之使用rsync实现网站镜像和备份linux
rsync 数据同步使用详解
linux URL的301重定向代码分析
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
Apache服务器二级域名的完美实现

Linux服务器 中的 搭建一个大型网站架构的实验环境(Squid缓存服务器篇)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 119 ::
收藏到网摘: n/a

Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品。

Squid是一个应用级代理,在保证客户端主机和服务器主机网络连通后,需要客户端软件做相应的设置后才能使用,比如给 Internet Explorer设置代理服务器地址、端口等。
WEB缓存功能对于一个规模较大、访问繁忙的网络来说是有必要的,IBM网站上的一篇文章,详细分析介绍了WEB缓存给上网用户带来的好处:
http://www-900.ibm.com/developer ... achinga/index.shtml
下面我们就介绍一下squid的有关内容。
§§ 安装运行squid
Redhat 7.3自带Squid的rpm包squid-2.4.STABLE6-1.7.2.i386.rpm,这里我们直接利用rpm来安装Squid:
[root@rh73 /mnt/cdrom/RedHat/RPMS]# rpm -ivh squid-2.4.STABLE6-1.7.2.i386.rpm
Preparing... ########################################### [100%]
1:squid ########################################### [100%]
安装后的Squid配置文件在/etc/squid/目录下,只需要简单的配置一下/etc/squid/squid.conf就可以让它工作起来了。
默认安装的Squid配置文件是一个两千多行的文本,实事上你用不到设置那么多。用编辑器打开该配置文件,找到http_access设置部分,把
http_access deny all
一行改成
http_access allow all
然后启动Squid:
/etc/rc.d/init.d/squid start
现在你的Squid代理服务器已经可以使用了。到客户端设置上网软件的代理选项,以Internet Explorer 6.0为例,在Internet属性设置里设置“连接”属性,点“局域网设置”按钮。
在弹出的对话框中选中“为LAN使用代理服务器”,在地址栏填入代理服务器地址,这里是:192.168.100.254,端口为squid默认的3128。
确认。此时你再用Internet Explorer上网便是使用squid代理。你可以察看squid的log文件来观察到客户端主机通过squid的访问情况:
[root@rh73 ~]# tail -f /var/log/squid/access.log

在这里,上面的设置只对Internet Explorer起作用。如果你按照前面的章节在Linux接入服务器上实现了NAT的功能,除了IE浏览器里访问http、ftp服务是在用squid 代理外,其它上访问Internet的操作,如收发Email,telnet,还是通过NAT完成访问。当你把浏览器的代理设置选项清除后,你又可以恢复到NAT方式访问Internet。
§§ 设置squid
前面的配置是不加限制的允许内部所有用户使用该代理上Internet,显然这不是一个很好的访问策略。我们说过,代理方式对用户权限的控制有着非常丰富的支持。下面就看看squid如何实现多样化的权限控制的。
让我们先了解一下squid.conf的几个配置选项和访问控制特性:
Squid 的定制是通过设置它的配置文件 squid.conf 来实现的,squid.conf 文件通常在 /etc/squid 目录下。这个配置文件内容很多,但它的每个选项都有详尽的说明。下面是几个常用的配置参数:
http_port
首先来更改一下 http_port,这个选项指定了 Squid 监听客户请求的端口,默认值是 3128。要使用代理功能,建议这个端口值和运行 Squid 的机器的 IP 地址一起使用,可以修改成下面这样:
http_port 192.168.100.254:3128
上述声明表示 Squid 绑定在 IP 地址 192.168.100.254 上,端口为 3128。端口可以设置为任意值,但要确认没有其他程序会使用同样的端口。/etc/services文件列出了常用端口,如果你想为squid设置其它的端口,可以参考这个文件的内容,防止重复设置。
visible_hostname 192.168.100.254
运行squid的主机的名字,可以写上该机器的IP地址。
[email][email protected][/email]
管理员的邮件地址。在访问发生错误时,visible_hostname和cache_mgr这两个选项的值显示在错误提示页面内的相关位置。
cache_mem 16 MB
定义缓存内存,一般定义为物理内存大小的1/3。默认设置为8MB。
cache_dir Type Directory-Name Fs-specific-data [options]
定义硬盘缓存空间以存储访问过的页面或其它资源的拷贝。Type是指存储类型,一般设置为ufs。Directort-Name代表缓存的位置,默认的设置是cache_dir ufs /var/spool/squid 100 16 256。其中100代表缓存空间最大为100M;16和256代表缓存目录下的一级和二级目录数。
访问控制
控制用户的访问权限等功能是使用squid的访问控制特性来实现的。Squid 访问控制有两个要素:ACL和访问列表。访问列表可以允许或拒绝某些用户对特定服务的访问。
为了使用控制功能,必须先设置 ACL。ACL 声明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl

下面列出一些重要的 ACL类型(type_of_acl_element)
l src : 源地址(即客户机IP地址)
l dst : 目标地址(即服务器IP地址)
l srcdomain : 源名称 (即客户机名称)
l dstdomain : 目标名称 (即服务器名称)
l time : 一天中的时刻和一周内的一天
l url_regex : URL 规则表达式匹配
l urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
l proxy_auth : 通过外部程序进行用户验证
l maxconn : 单一 IP 的最大连接数

注:
1. acl_element_name 可以是任一个在 ACL 中定义的名称。
2. 任何两个 ACL 元素不能用相同的名字。
3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一 ACL的值被匹配,则这个 ACL即被匹配。
4. 并不是所有的 ACL都能使用访问列表中的全部类型。
5. 不同的 ACL写在不同行中,Squid 将把它们组合在一个列表中。
我们可以使用许多不同的访问列表。我们常用的是http_access: 允许 HTTP 访问,这个是主要的访问控制列表。
访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。

注:
1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
2. 一个访问列表可以又多条规则组成。
3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
4. 一个访问条目中的所有元素将用逻辑与运算连接:
http_access Action 声明1 AND 声明2 AND 声明 OR.
http_access Action 声明3
多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。
5. 请记住列表中的规则总是遵循由上而下的顺序。
我们具体来看看如何运用acl和http_access。首先把squid.conf的配置改回原状,即修改http_access allow all为http_access deny all。下面给出几种常用访问控制:

根据IP鉴权
只有地址为192.168.100.10和192.168.100.100的终端可以使用代理
在squid.conf的ACCESS CONTROL配置部分添加
acl authorizedip src 192.168.100.10
acl authorizedip src 192.168.100.100
然后到http_access部分
在http_access deny all这一行前面添加
http_access allow authorizedip
如果需要设置的IP地址非常多,又不连续,是不是要写上一大堆的acl xxx xxx x.x.x.x?有一个简单的方法,把这些IP地址写在一个文件里,比如/upload/tech/20091004/20091004004831_08419be897405321542838d77f855226.txt,每行一个。然后在squid.conf里这样写
acl authorizedip src "/upload/tech/20091004/20091004004831_08419be897405321542838d77f855226.txt"
根据时间控制
关于时间段的设置,可以参见squid.conf中的说明,具体是S - Sunday, M - Monday, T - Tuesday, W - Wednesday, H - Thursday, F - Friday A - Saturday,如果七天都允许,也可以不写。时间格式是H1:M1-H2:M2,要求是前面的要小于后面的。
# 定义一个访问时间段:每周星期一到星期五的上午八点到下午五点,允许alloweduser用户在这个时间段内上网
acl accept_time time MTWHF8:00-17:00
http_access allow alloweduser accept_time
http_access deny alloweduser
访问特定URL地址
虽然我们不希望所有的人都使用代理自由的访问Internet,但有几个网站是可以让内部终端都能访问的。在squid.conf里添加访问控制:
acl alloweddomain dstdomain .linuxforum.net .linuxaid.com.cn
http_access allow alloweddomain
同样的,如果参数很多的情况,也可以把这些允许的地址名写到一个文本里:
acl alloweddomain dstdomain "/upload/tech/20091004/20091004004832_d516b13671a4179d9b7b458a6ebdeb92.txt"
alloweddomain.txt里是允许访问站点的列表,每行一个。
根据关键字过滤网址
有些网站(色情网站,广告网站)很令人讨厌,通过设置acl可以很容易屏蔽掉这些站点:
acl denyurl url_regex sex boylink xxx city69 asiaadult sehu
http_access deny denyurl
这个设置将过滤带有sex boylink xxx city69 asiaadult sehu这些关键字的URL地址。
和前面一样,也可以把这些关键字写到一个文本里
acl denyedurl url_regex "/upload/tech/20091004/20091004004833_5f2c22cb4a5380af7ca75622a6426917.txt"
http_access deny denyurl
基于用户的认证
Squid本身并不支持用户验证,它是通过外部程序提供用户验证功能,用户通过squid访问前需要输入有效的用户名和密码。可以用 proxy_auth ACL 和 authenticate_program 来实现这个功能,在允许访问前强制进行用户名和密码的核查。下面列出一些 Squid 能用到的验证程序:
NCSA : 使用 NCSA 风格的用户名和密码档
LDAP : 使用 Linux Lightweight 目录访问协议(Linux Lightweight Directory Access Protocol)
SMB : 使用 SMB 协议的服务,如 SAMBA 或 Windows NT
MSNT : 使用 Windows NT 的域验证
PAM : 使用 Linux 的可装载验证模块
getpwam : 使用 Linux 密码档
使用验证功能必须用authenticate_program 选项指定使什么验证程序,并且请确认选定的验证程序已安装并能很好的工作。默认的,这些验证程序放在/usr/lib/squid/目录下。
以NCSA认证为例,修改 squid.conf 文件选定验证程序:
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/passwd
acl alloweduser proxy_auth pangty
http_access allow alloweduser
其中/etc/squid/passwd是用户和密码列表,这个文件可以用apache软件包带的htpasswd来产生,它的内容可能是这样的:
pangty:wCQhCeZOOF3vk
pangty是用户名,“:”号后面的是该用户的密码。
注意:修改了squid.conf配置后,需要重新启动squid或者告诉squid重新装入配置文件才能起作用。这样执行:
重起squid:
[root@rh73 ~]# /etc/rc.d/init.d/squid restart

不重起,只装入新的配置文件:
[root@rh73 ~]# /etc/rc.d/init.d/squid reload
以上是squid的常用的配置选项,这对于一般的应用来说已经足够了,如果你需要更多的特性支持,请阅读下面的内容。
§§ 需要更多的功能
显示中文错误提示信息
默认的,squid在发生错误时显示的是英文提示信息,squid的提示信息已经被翻译成很多语言,可以很方便的让他显示中文信息:
[root@rh73 ~]# cd /etc/squid/
[root@rh73 ~]# rm -f errors
[root@rh73 /etc/squid]# ln -s /usr/lib/squid/errors/Simplify_Chinese/ errors
/usr/lib/squid/errors下面有squid的各种语言版本的提示信息,按目录存放在不同的子目录下面。
支持基于MAC的控制以及访问带有下划线的URL
由于计算机的IP地址是随时可以更改的,所以即便你设置了ACL限制只有某些IP的计算机可以访问Internet,其它人仍然可以在该计算机关机的情况下,修改成这些允许上网的IP地址后访问Internet。另外,前面我们是使用DHCP来管理内部网络上的计算机的IP地址,每台计算机每次获得的IP地址可能是不一样的,所以,单纯的通过IP地址来控制上网权限并不适合所有的场合,而MAC地址相对是稳定的,一般网卡的MAC地址不能够更改,所以基于MAC地址的用户控制非常适合解决这两种情况带来的问题。
另外,我们访问Internet时,有时候会遇到这样的网站地址:http://www.hello_world.com,在网站的URL地址里面有下划线,这时Red Hat Linux自带的squid软件包可能会报告无法访问该网站。
这些功能需要重新编译squid源代码增加相应的编译选项来实现。下面我们就来看一下如何使用rpm重新编译软件包源代码获得必要的功能。
当文章写到这里的时候,Red Hat Linux网站发布了squid的升级软件包,我们可以从网上获得它的最新源代码rpm包:
ftp://updates.redhat.com/7.2/en/ ... ABLE6-6.7.3.src.rpm
在开始编译前,有一些软件包是需要首先安装,这可能包括rpm-build、sgml-tools,前者在Red Hat Linux的光盘上可以找到,后者可以从这里下载:
ftp://ftp.freesoft.cei.gov.cn/.m ... s-1.0.9-12.i386.rpm
安装squid的源代码包
[root@rh73 ~]# rpm -ivh squid-2.4.STABLE6-6.7.3.src.rpm
安装后的源代码包在/usr/src/redhat/SOURCES目录下,我们关心的是另外一个文件/usr/src/redhat/SPECS/squid.spec,这里面有squid的相关编译选项,修改该文件%configure部分如下:
%configure \
--exec_prefix=/usr --bindir=/usr/sbin --libexecdir=/usr/lib/squid \
--localstatedir=/var --sysconfdir=/etc/squid \
--enable-poll --enable-snmp --enable-removal-policies="heap,lru" \
--enable-storeio="aufs,coss,diskd,ufs" \
--enable-delay-pools --enable-linux-netfilter \
--with-pthreads \
--enable-underscores \
--enable-arp-acl \
--enable-err-language=Simplify_Chinese \
--enable-auth-modules="LDAP,NCSA,PAM,SMB,MSNT" # --enable-icmp
--enable-underscores是增加对下划线网址的支持,--enable-arp-acl是增加支持MAC地址方式的鉴权。

开始编译产生新的RPM包:
[root@rh73 ~]# rpm -ba squid.spe
这条命令将根据squid.spec的配置重新编译生成新的rpm包。编译过程视机器性能的好坏而定,大概需要几分钟到几十分钟不等,如果没有什么错误,最后产生的新的rpm包在/usr/src/redhat/RPMS/i386/目录下:squid- 2.4.STABLE6-6.7.3.i386.rpm
安装新的rpm包:
[root@rh73 ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/squid-2.4.STABLE6-6.7.3.i386.rpm
注意,这里使用了-U参数,是因为我们前面已经安装过squid的一个较旧的版本,-U参数指出这个操作是对原有版本软件包的升级。现在你的squid就可以支持MAC地址鉴权和带下划线的URL地址了。 8)
配置squid.conf来支持MAC地址鉴权,在squid.conf里加入这样的内容:
acl allowedmac arp00:10:DC:8F:5B:FF
http_access allow allowedmac
上面只是常用的几种ACL设置的示例,关于ACL可以访问squid主页上FAQ文档的Access Controls部分获得更多的信息:
http://www.squid-cache.org/Doc/FAQ/FAQ-10.html
§§ 配置透明代理
透明代理是NAT和代理的完美结合,之所以称为透明,是因为在这种工作方式下你感觉不到代理的存在,和单纯使用NAT一样,对上网的客户端没有任何特殊的设置。Squid可以通过配置支持透明代理。

很多文章讲到共享上网就会讲有关透明代理(iptables + squid或ipchains + squid)的内容,我个人认为对于规模不大的网络,又没有内容过滤等功能的要求,使用squid是没有必要的,单纯的使用NAT方式就足够了,并且这样对运行NAT的服务器的要求就更加低,比如使用一台486 + 4M内存的机器,如果使用那些经过特殊定制的Linux系统,甚至连硬盘都不需要,只要一张软盘就可以了。
如果是源代码方式编译安装的squid,请在编译选项里指明--enable-linux-netfilter选项。Red Hat Linux自带的squid支持透明代理,我们可以直接修改/etc/squid/squid.conf文件,设置必要的参数:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
运行/etc/rc.d/init.d/squid reload使设置生效,然后修改fw.sh脚本,在最后添加这样一行:
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
这将把所有局域网用户通过Linux接入服务器访问www服务的访问请求重定向到工作在3128端口的squid处理。运行fw.sh脚本,使设置生效。就这么简单!
你可能还记得fw.sh里面的关于NAT的规则:
iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 61.156.35.114
由于PREROUTING规则总在POSTROUTING规则之前应用,所以不用担心squid被NAT规则屏蔽掉。
注意:使用透明代理时,无法同时使用squid基于用户帐号的验证功能!

想了解更多关于透明代理的资料,请访问TLDP(The Linux Documentation Project)上关于透明代理的HOWTO文档:
http://www.tldp.org/HOWTO/mini/TransparentProxy.html
§§ 一个squid.conf的配置实例
现在给出一个支持透明代理并使用MAC地址控制用户上网权限的squid配置文件,该配置还支持特定网站(如色情网站)的过滤功能:
#定义服务器地址和端口
http_port 192.168.100.254:3128
#定义服务器名字
visible_hostname 192.168.100.254
#定义管理员邮件地址
cache_mgr [email][email protected][/email]
#定义缓存内存空间和缓存目录
cache_mem 16 MB
cache_dir ufs /var/spool/squid 100 16 256
#支持透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#定义acl
#sexurl.txt列出要过滤色情网站地址的关键字,每个关键字占一行,如xchina
#maclist.txt列出允许上网的主机的MAC地址,每个地址占一行,如00:50:56:C0:00:08
acl all src 0.0.0.0/0.0.0.0
acl sexurl url_regex "/upload/tech/20091004/20091004004833_c16a5320fa475530d9583c34fd356ef5.txt"
acl allowedmac arp "/upload/tech/20091004/20091004004834_0e65972dce68dad4d52d063967f0a705.txt"
#定义访问策略
http_access deny sexurl
http_access allow allowedmac
http_access deny all
Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品。

六、squid缓存服务器的配置
squid缓存服务器在这个实验环境中有两台(192.168.10.30,192.168.10.31)做成squid集群,我们首先安装一台,然后复制一台,再做配置,这样省事,哈!
squid01服务器网络配置
# ee /etc/rc.conf
ifconfig_lnc0="inet 192.168.10.30 netmask 255.255.255.0"
defaultrouter="192.168.10.10"


192.168.10.30 squid01.rd.bj # ee /etc/resolv.conf
nameserver 192.168.10.40

网络配置好后,我们开始安装squid,先把的藏身处找到:
# whereis squid30
squid30: /usr/ports/www/squid30
# cd /usr/ports/www/squid30
sq_1
===> The following configuration options are available for squid-3.0.1:
SQUID_LDAP_AUTH=off "Install LDAP authentication helpers"
SQUID_SASL_AUTH=off "Install SASL authentication helpers"
SQUID_DELAY_POOLS=off "Enable delay pools"
SQUID_SNMP=on "Enable SNMP support"
SQUID_CARP=on "Enable CARP support"
SQUID_SSL=off "Enable SSL support for reverse proxies"
SQUID_PINGER=off "Install the icmp helper"
SQUID_HTCP=on "Enable HTCP support"
SQUID_VIA_DB=off "Enable forward/via database"
SQUID_CACHE_DIGESTS=on "Enable cache digests"
SQUID_WCCP=on "Enable Web Cache Coordination Prot. v1"
SQUID_STRICT_HTTP=on "Be strictly HTTP compliant"
SQUID_IDENT=on "Enable ident (RFC 931) lookups"
SQUID_REFERER_LOG=on "Enable Referer-header logging"
SQUID_USERAGENT_LOG=on "Enable User-Agent-header logging"
SQUID_IPFW=off "Enable transparent proxying with IPFW"
SQUID_PF=off "Enable transparent proxying with PF"
SQUID_IPFILTER=off "Enable transp. proxying with IPFilter"
SQUID_ICAP=off "Enable ICAP client functionality"
SQUID_ESI=off "Enable ESI support (experimental)"
SQUID_COSS=off "Enable the COSS storage scheme"
SQUID_LARGEFILE=on "Support log and cache files >2GB"
SQUID_DEBUG=off "Enable debugging options"
===> Use 'make config' to modify these settings
# make install clean
漫长的安装过程又来了, 我该干点什么呢?看看新浪互联星空播客吧!速度挺快的,支持!!!

Squid 安装好了,现在开始配置她了。安装完后,在/usr/local/etc/squid下有squid的配置文件squid.conf和 squid.conf.default,这两个都是一样的,我们先删除掉squid.conf,在建个新的squid.conf,然后把我们的配置信息写 在里面,这样的话更加清晰一点,省得在原来的配置文件中改,里面内容那么多,改到后来,自己都不知道改了那些东西,糊涂了,如果对配置有什么不清楚的还是 可以参考squid.conf.default文件的。
# rm -rf squid.conf
# touch squid.conf
# ee squid.conf
http_port 192.168.10.30:3128 vhost vport defaultsite=www.rd.bj
cache_mem 64 MB
cache_swap_low 90
maximum_object_size 20 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 5 MB
ipcache_size 1024
ipcache_low 90
fqdncache_size 1024

#acl all src 0.0.0.0/0.0.0.0 #好像squid30已经内置了
acl gsrc src 192.168.10.20 192.168.10.30 192.168.10.31 192.168.10.40
http_access allow gsrc

acl Manager proto cache_object
acl Localhost src 127.0.0.1
http_access allow Manager Localhost

acl Safe_ports port 3128 80 3130 3131
http_access allow all


cache_mgr [email protected]

cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65536 bytes


cache_peer_access 192.168.10.31 allow all
cache_peer 192.168.10.40 parent 80 0 no-query originserver no-digest

access_log /usr/local/squid/logs/access.log
cache_dir diskd /usr/local/squid/cache 256 16 256 Q1=60 Q2=50

error_directory /usr/local/etc/squid/errors/Simplify_Chinese

icp_port 3130
htcp_port 0
icp_query_timeout 2000
icp_access allow all
digest_generation on
icp_hit_stale on
保存退出后,我们验证一下配置文件是否正确:
# rehash
# squid parse
OK,现在我们先根据配置文件创建缓存目录。
# squid -z
2007/12/27 12:43:55| Creating Swap Directories
2007/12/27 12:43:55| Making directories in /usr/local/squid/cache/00
2007/12/27 12:43:55| Making directories in /usr/local/squid/cache/01
2007/12/27 12:43:55| Making directories in /usr/local/squid/cache/02
2007/12/27 12:43:55| Making directories in /usr/local/squid/cache/03
2007/12/27 12:43:56| Making directories in /usr/local/squid/cache/05
2007/12/27 12:43:57| Making directories in /usr/local/squid/cache/06
2007/12/27 12:43:58| Making directories in /usr/local/squid/cache/07
2007/12/27 12:43:58| Making directories in /usr/local/squid/cache/08
2007/12/27 12:43:59| Making directories in /usr/local/squid/cache/0A
2007/12/27 12:43:59| Making directories in /usr/local/squid/cache/0C
2007/12/27 12:44:00| Making directories in /usr/local/squid/cache/0D
2007/12/27 12:44:01| Making directories in /usr/local/squid/cache/0F

这样就创建完成了。
在这里我补充一点,如果创建缓存目录失败的,多半是目录读写权限的问题。因为我们是ports安装的,所以系统会跟我们预先创建好squid用户和用户组。并把家目录指向/usr/local/squid。所以我们这里一般不会有问题。但是,如果大家是用下载的源码自行编译又想把缓存目录换到别的位置或是用个新硬盘存放,那改怎么办呢?我慢慢跟你道来。
首先我们格式化新硬盘
可以利用sysinstal来完成,具体操作可以参考FressBSD安装的那个章节有介绍,这里不说了。格式化好硬盘后,因为我们是用来存放缓存文件的,所以我们对该块硬盘做点小优化。
# newfs -b 8192 -f 1024 /dev/ad1s1d
# tunefs -n enable /dev/ad1s1d # 启用Soft Updates,必需在硬盘没有被挂载的时候或在单用户模式下才可以应用
# mount /dev/ad1s1d /cache
# ee /etc/fstab # 加载硬盘
补充小知识:
当 我们的分区主要存放大量小型文件时,我们会将block size 调小一点,如 8K 或是 4K。而在 newfs 时,我们也会指定fragment size,它的值最好是 block size 的八分之一,例如当block size 为8K 时,我们会使用newfs -b 8192 -f 1024 来格式化硬盘。如果您使用的是/stand/sysinstall 来格式化硬盘,您可以在格式化硬盘时按N来设置newfs option。
新硬盘安装好了以后,我们现在来做配置:
# pw groupadd squid
# pw useradd squid -s /usr/sbin/nologin -d /nonexistent -g squid
# mkdir /cache/www.rd.bj #建立缓存目录
# chown -R squid:squid /cache/www.rd.bj
好了,现在只需要把squid.conf里的
改成
cache_dir diskd /cache/www.rd.bj 256 16 256 Q1=60 Q2=50
# squid -z
好了就补充到这里吧,我们继续我们的探索之旅。

现在squid的配置文件已经测试无误了,那我们还等什么,赶紧测试一下服务叻!
# squid -CDNd1
2007/12/27 14:01:56| Starting Squid Cache version 3.0.STABLE1 for i386-portbld-freebsd6.3...
2007/12/27 14:01:56| Process ID 810
2007/12/27 14:01:56| DNS Socket created at 0.0.0.0, port 49839, FD 5
2007/12/27 14:01:56| Adding nameserver 192.168.10.40 from /etc/resolv.conf
2007/12/27 14:01:56| User-Agent logging is disabled.
2007/12/27 14:01:56| Referer logging is disabled.
2007/12/27 14:01:56| Unlinkd pipe opened on FD 9
2007/12/27 14:01:56| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2007/12/27 14:01:56| Swap maxSize 262144 KB, estimated 20164 objects
2007/12/27 14:01:56| Target number of buckets: 1008
2007/12/27 14:01:56| Max Mem size: 8192 KB
2007/12/27 14:01:57| Rebuilding storage in /usr/local/squid/cache (DIRTY)
2007/12/27 14:01:57| Current Directory is /root
2007/12/27 14:01:57| Accepting accelerated HTTP connections at 192.168.10.30, port 3128, FD 11.
2007/12/27 14:01:57| Accepting ICP messages at 0.0.0.0, port 3130, FD 12.
2007/12/27 14:01:57| Configuring Sibling 192.168.10.31/3128/3131
2007/12/27 14:01:57| Configuring Parent 192.168.10.40/80/0
2007/12/27 14:02:04| Done scanning /usr/local/squid/cache swaplog (0 entries)
2007/12/27 14:02:04| Finished rebuilding storage from disk.
2007/12/27 14:02:04| 0 Invalid entries.
2007/12/27 14:02:04| 0 Objects loaded.
2007/12/27 14:02:04| 0 Objects expired.
2007/12/27 14:02:04| 0 Objects cancelled.
2007/12/27 14:02:04| 0 Duplicate URLs purged.
2007/12/27 14:02:04| 0 Swapfile clashes avoided.
2007/12/27 14:02:04| Took 6.97 seconds ( 0.00 objects/sec).
2007/12/27 14:02:04| Completed Validation Procedure
2007/12/27 14:02:04| Validated 25 Entries
2007/12/27 14:02:04| store_swap_size = 0
2007/12/27 14:02:04| storeLateRelease: released 0 objects

启动没有什么问题,来我们用浏览器访问一下吧!
sq_2
正式启动可以使用:

OK,我们的Squid01的配置就到这里, 现在我们关闭虚拟机,然后拷贝一份squid01为squid02,用来配置另一台Squid服务器。

复制好squid02后,我们现在开始配置了, 应为squid01的大部分工作都已经做好了, 所以squid02的配置就比较方便了,只要是配置文件中IP地址和机器名的修改。
# ee /etc/rc.conf
defaultrouter="192.168.10.10"
hostname="squid02.rd.bj"

# ee /etc/hosts
192.168.10.31 squid02.rd.bj

# ee /usr/local/etc/squid/squid.conf
最后修改好的配置文件为:
http_port 192.168.10.31:3128 vhost vport defaultsite=www.rd.bj


cache_swap_low 90
cache_swap_high 95
minimum_object_size 0 KB
maximum_object_size_in_memory 5 MB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
#acl all src 0.0.0.0/0.0.0.0
http_access allow gsrc

acl Manager proto cache_object
acl Localhost src 127.0.0.1
http_access allow Manager Localhost

acl Safe_ports port 3128 80 3130 3131
http_access allow all

visible_hostname squid01.rd.bj
cache_mgr [email protected]
cache_effective_group squid
tcp_recv_bufsize 65536 bytes
cache_peer 192.168.10.30 sibling 3128 3130
cache_peer 192.168.10.40 parent 80 0 no-query originserver no-digest
access_log /usr/local/squid/logs/access.log
cache_dir diskd /usr/local/squid/cache 256 16 256 Q1=60 Q2=50
icp_port 3131
icp_query_timeout 2000
icp_access allow all
digest_generation on
log_icp_queries on

最后,关于Squid,给大家推荐一本好书《Squid中文权威指南》虽然讲的是squid2.5版本的,但是有很好的指导意义,我相信大多数人都已经看过了,在此推荐是对作者辛勤劳动的无比崇敬。好,我们即将要踏上proxy服务器之旅。