squid2.5安装与配置详解

发布时间:2020-06-11编辑:脚本学堂
squid2.5安装与配置详解
安装squid
复制代码 代码如下:
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/squid-2.5.STABLE2.tar.gz
# ....(略)....会产生一个 squid-2.5.STABLE2 的目录
[root@test src]# cd squid-2.5.STABLE2

1. 开始设定参数
[root@test squid-2.5.STABLE2]# export CFLAGES='-O2 -mcpu=i586'
# 这是一个额外的参数啦!因为我们使用的是 linux ,而我们的 GNU gcc 
# 有针对每种不同的 CPU 来进行套件的最佳化编译!所以啦,就加入我们的
# CPU 型号吧!因为我的 CPU 是 P-166 ,反正是个小案例啦!所以才会是 i586,
# 您的 CPU 只要超过赛扬等级以上,就会是 i686 啰!此外,除了
# i386, i486, i586, i686 还有 pentium, pentium3, pentium4, athlon, 
# athlon-tbird, athlon-4, athlon-x, athlon-mp, k6, k6-2, k6-3 等等!
# 如果不确定您的 CPU 那么就用 ix86 之类的方式来命名吧!不过,即使没有
# 写入这个参数也无所谓啦!至于那个 O2 是最佳化参数啦!
 
复制代码 代码如下:
[root@test squid-2.5.STABLE2]# ./configure --prefix=/usr/local/squid 
> --enable-gnuregex --enable-async-io=80 --enable-icmp
> --enable-kill-parent-hack --enable-snmp 
> --disable-ident-lookups --enable-cahce-digests
> --enable-err-language="Traditional_Chinese" 
> --enable-poll --enable-linux-netfilter
 
# 这个就有趣啦!因为实在有相当多的参数可以使用,你可以使用 
# ./configure --help 来察看可以使用的许多参数啊!稍微解释一下各个设定值:
--prefix=/usr/local/squid:未来程序编译完成后放置的安装目录;
--enable-gnuregex:使用 GNU 提供的正规表示法的原则来进行编译,请注意,因为在 Proxy 未来的规划当中,很可能会动用到正规表示法的方式来抵挡一些恶意的网站,所以这里应该要加入这个参数的!
--enable-async-io=80:这个项目主要在控制一些输出入的组件,使用这个项目可以让您的 Proxy 效能提升很多喔,因为是异步输出 (async) 的模式啊!
  后面接的数值是可以变动的,如果您的网站配备很高档,可以尝试将这个数字提升到 160 以上,如果是小网站的话,那么可以考虑将他降低至 40 左右。
--enable-icmp:要不要支援 ICMP 啊!当然是要的!
--enbale-kill-parent-hack:在我关掉 squid 的时候,要不要连同parent process 一起关掉,当然也是要的啦!
--enable-snmp:这个与制图的 MRTG 比较有关啦!如果没有用到的话, 可以考虑将这个项目拿掉也没有关系!
--enable-cache-digests:这个项目很重要的啦,我们在底下再进行说明。
--enable-err-language="Traditional_Chinese":不需要写了吧?只要有任何的错误讯息,网页上面显示的语系会是中文喔!
--enable-poll :可以提升效能;
--enable-linux-netfilter:可以增加通透式 Proxy 的设定!后面再提啦!
 
2. 开始编译以及Install 
复制代码 代码如下:
[root@test root]# make && make install

3. 开始设定其它的相关参数
复制代码 代码如下:
[root@test root]# vi /etc/man.config
# 在这个档案当中新加入一行:
MANPATH /usr/local/squid/man   # 与 Squid 有关的 man page
# 可以让 squid 提供的说明文件让 man 指令可以查到!

squid的结构
 
刚刚安装的目录其实是在 /usr/local/squid 这个目录下,而这个目录又分为几个主要的子目录,分别为:
bin/ :放置主要的 squid 执行 scripts 的目录,重要的是 RunCache 那个档案;
etc/ :几乎所有的 squid 设定档都在这里;
libexec/ :一些函式库;
man/ :就是一些在线文件查寻档啦!
sbin/ :重要的就是那个 squid 的执行档!
share/ :一些错误讯息代码表示档案,以及一些小图标放置的目录;
var/ :预设是放置 log file 的,不过我不喜欢放在这里,这点等一下我们会修改的!
 
那么主要的设定档有哪些呢?其实可以说只有两个啦:
 
/usr/local/squid/etc/squid.conf :这个是主要的设定档,所有的 squid 所需要的设定都是放置在这个档案当中的!鸟哥底下提到的种种设定方法几乎都是这个档案里面的说明喔!所以,如果您英文不错,那么就直接看一下这个档案就知道如何设定 squid 啦!
/usr/local/squid/etc/mime.conf :这个档案则是在设定 squid 所支持的 Internet 上面的档案格式,就是所谓的 mime 格式啰!一般来说,这个档案的预设内容已经能够符合我们的需求了,所以不需要更动他,除非您很清楚的知道您所需要额外支持的 mime 档案格式。
 
而执行档其实只有一个,那就是 squid 啦!不过, Squid 这个套件额外的提供了两个可执行的 scripts 来帮助大家执行 squid ,那就是在 bin/ 里面的 RunAccel 与 RunCache:
/usr/local/squid/sbin/squid :就是我们说的 squid 的执行档啰!要知道这个指令的参数吗?就使用『 ./squid --help 』就能知道有什么参数啦!
/usr/local/squid/bin/RunCache :这个是主要的执行 squid 的一支简单的 script ,主要是利用 squid.conf 设定档案的内容来启用 squid 喔!
/usr/local/squid/bin/RunAccel :如果您的 WWW 服务也想要透过 Squid 来进行『加速』的话,那就可以使用 RunAccel 来取代 RunCache 了,不过,我通常还是使用 RunCache而已!
[root@test root]# cd /usr/local/squid/etc
[root@test root]# vi squid.conf
# 1. 关于网络的参数设定部分
#   在这个部分当中,最重要的就是启用 squid 这个 daemon 的 port 了!
#  在预设的情况下,公认的标准 proxy port 为 3128 ,至于被查询封包
#  观察的则是 3130 这个 port,这里我们分别启用这两个 port !如果您的
#  Proxy 还有帮人家代理 https 这个由 SSL 协议启用的 port ,那么还需要
#  启动 https_port ,但是我们这里不谈论 SSL 啦!太危险了~
http_port 3128
icp_port  3130
 
# 2. 设定快取目录 ( Cache dir ) 的大小与记录档案所在的目录
#  这个设定是重要到爆的地方,一定得设定正确才行啊!上面我们不是
#  提过关于硬盘与目录吗?好了,现在这样假设:我有两块 partition ,
#  这两块 partition 分别挂载在 /usr/local/squid/var/cache1
#  以及 /usr/local/squid/var/cache2 这两个区域,此外,两块 
#  partition 一块为 1GB (cache1) 另一块为 2 GB (cache2) ,则设定为:
#  <cache_dir> <aufs|ufs> <目录所在> <MBytes大小> <dir1> <dir2>
#  那个 aufs 只有在编译的时候加入 --enable-async-io 那个项目才有支持,
#  至于目录所在地与所占用的磁盘大小则请视您的主机情况而定,
#  而后面 dir1, dir2 则是两个次目录的大小,通常 16 256 或 64 64 皆可,
#  一般来说,数字最好是 16 的倍数,据说效能会比较好啦!
#  注意1:下面两行需要『视您的主机环境而定!』不要照抄!
#  注意2:在底下的例子中,我的两块 partition 已经 mount 上该目录了!
#  就是说,底下的两个目录是『已经存在的!』
复制代码 代码如下:
cache_dir aufs /usr/local/squid/var/cache1 1000 16 256
cache_dir aufs /usr/local/squid/var/cache2 2000 16 256
# 底下则是关于记录文件的放置目录与文件名!
cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
pid_filename /usr/local/squid/var/logs/squid.pid
 
 
# 3. 关闭认证机制
复制代码 代码如下:
#  不晓得为什么,这一版的 squid 会自动的加入认证机制,请找到底下
#  几行,将他 mark 起来!
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
 
 
# 4. 提供 squid 服务
复制代码 代码如下:
#  预设的情况下,仅有本机可以使用 squid ,我们先将所有的权限开放
#  然后在一个一个的关闭啰!先找到底下这一行:
http_access deny all
#  将他改成
http_access allow all
 
 
# 5. 设定 squid 的拥有者与系统管理员信箱:
复制代码 代码如下:
#  就是刚刚我们上一小节提到的 squid 的拥有者,请注意,这个
#  user 与 group 必需要在 /etc/passwd 及 /etc/group 里面存在方可成功!
#  我这里以权限最小的 nobody, nogroup 来做为范例,您也可以自行设定!
#  另外,cache_mgr 则是 squid 管理员的信箱,当 squid 发生问题时,
#  屏幕上就会出现这个信箱给使用者联系管理员之用!
cache_effective_user   nobody
cache_effective_group  nogroup  # 您也可以改成 nobody !
cache_mgr youraccount@your.e.mail
 
 
# 6. 变更目录权限:
复制代码 代码如下:
#  在预设的情况下,我们主要的纪录信息都写入 /usr/local/squid/var 里面,
#  所以这个时候需要将这个目录的权限改变成为 nobody 与 nogroup 所有!
#  当然啰,如果您的 cache_dir 不在这个目录当中,那么还需要额外自行建立,
#  例如我的 cache_dir 万一是在 /proxy1 与 /proxy2 时,那么我就必需要:
#  chown -R nobody:nogroup /proxy1
#  chown -R nobody:nogroup /proxy2
#  关于权限的问题是很重要的!请不要忘记了!
[root@test root]# chown -R nobody:nogroup /usr/local/squid/var
 
 
# 7. 开始启动 squid:
复制代码 代码如下:
#  启动 squid 来试看看吧!不过,首先我们必需要建立快取目录的格式
#  才行,此外,由于我们想要以 nobody 来启动 squid ,所以你需要这样:
[root@test root]# /usr/local/squid/sbin/squid -z # 建立 cache_dir
[root@test root]# su nobody -c "/usr/local/squid/bin/RunCache &"
 
 
# 8. 查看是否真的启动了 squid 了?
复制代码 代码如下:
[root@test root]# netstat -tln | grep 3128
tcp        0      0 0.0.0.0:3128       0.0.0.0:*          LISTEN
 
 
# 9. 重新读取设定档 squid.conf 的方法:
[root@test root]# /usr/local/squid/sbin/squid -k reconfigure
在上面的设定中,重要的地方在于:
你的硬盘规划与 cache_dir 的设定是否吻合:请注意,除非您是『架设着玩的,纯粹锻炼功力』的角度来设定 Proxy ,那么可以直接以预设的设定来搞定您的 cache_dir ,不然的话,前面我们提过,这个 Cache dir 可是影响 Proxy 效能的相当重要的因素之一,因此,千万不可大意啊!
 
关于权限的大问题:由于我们常常提倡『不要以 root 来启动 daemon 』,所以这个 squid 我们是以 nobody 与 nogroup 来启动的!而 Process 与权限的关系是相当相当的重要的,因此,您必需要将上面刚刚建立的 cache_dir 更动整个目录的拥有者才行!如果是锻炼功力而已,那么随意建立一个目录更动一下他的拥有者与群组,就行了,不然的话,请依照您的硬盘规划好好的设计一番!
 
关于 cache_dir 重新建置的步骤:在上面的第 7 个步骤当中,我们必需以 squid -z 来重建一下 cache_dir 的格式,这个步骤在第一次启动 squid 时才做,其它时候就不需要进行了!而进行这个步骤之前,请务必将上面提到的两点注意事项先搞定,否则您的 squid 很难启动喔!
实际浏览器的查验:虽然上面第 8 个步骤已经确认了 squid 启动了,但是还不能肯定工作正常,这个时候如果您有 client 端的计算机,假设是 Windows 的 IE 好了,那么就赶
紧来测试看看能不能使用 squid 啰!启动 IE 后,按下:
『工具』->
『Internet 选项』->
『联机』->
『局域网络设定』中,点选
『使用 Proxy 服务器
并在网址列输入你的主机名称 ( 或者是 IP 均可 ),然后按确定离开!然后在 IE 中按按看网页的设定有没有成功,如果可以读到网页的话,表示 squid 可以正常的被使用了!
cache_dir 这个参数的意义与存取格式的类型:
这个设定项目就是限制暂存区大小的地方啦,格式为:
复制代码 代码如下:
cache_dir ufs /usr/local/squid/var/cache 100 16 256
 
 
上面的说明是:暂存区目录为 /usr/local/squid/var/cache ,而暂存空间大小为 100M , 在这个暂存目录下有 16 个目录,而每个目录中又有 256 个目录 ( 你可以实际进入/usr/local/squid/cache 当中去看看 ) 。如果你要改变暂存盘目录及这个目录的大小时,可以在这里修改!不建议修改 16, 256 这两个数值。另外,通常,如果是我们一般小型的区网 ( 不超过10个人 ) ,那设定个  500 MB作为 cache 应该够了,如果你的硬盘够大,设定成 1000 MB 以上更好,当然,与第一个注意事项相符的,需要与您的实际硬盘大小以及 Partition 放置的目录互相配合才行。修改过这个指令后,要再重新启动 squid 之前,请先使用下面的指令来使你的目录可以进行存取的动作,否则你的 squid 是不会工作的!例如你将上面的参数修改成:
复制代码 代码如下:
cache_dir ufs /usr/local/squid/var/cache 1000 16 256

 
然后再进行下面的指令: 
复制代码 代码如下:
rm -rf /usr/local/squid/var/cache
mkdir /usr/local/squid/var/cache
chown nobody:nogroup /usr/local/squid/var/cache
/usr/local/squid/sbin/squid -z

这样你的squid暂存目录就可以使用啰!另外,如果你在编译 (configure 过程中) 的时候有将 --enable-async-io 这一个参数加进来的话,将可以增加 aufs 这一个数据存取的格式!这个存取的格式可以将你的硬盘发挥到最极限的速度喔!虽然在 squid.conf 档案中有提及,这个 type 可能会有 bug 存在,不过,据鸟哥的使用结果,发现,没啥大问题!好用的很!所以,你可以将上面的咚咚改成下面的样子:
复制代码 代码如下:
cache_dir aufs /usr/local/squid/var/cache 1000 16 256

这样就算已经完成了一个『很阳春』的小型 proxy 了!为什么说很阳春呢?这是因为这个 Proxy 并没有上层 Proxy 喂数据,所以 Client 端的任何要求这个 Proxy 都需要『自己去捉』啊!哇!那么这个 Proxy 还真累啊!没错啊,所以底下我们要再来谈一谈其它几个增加 proxy 效能的方法,好让大家的 Proxy Server 可以真的加快您浏览的速度啊!
# 与内存有关的设定:因为我的系统很小,所以只给 8 MB!如果您的物理内存
# 很大的情况下,例如 512 MB,可以考虑加大到 64 或 128 MB。
cache_mem                       8 MB
# 与磁盘容量有关的设定(注:下列的 90 与 95 是百分比 )
# 如果您的 cache_dir 所在磁盘很大时,可以考虑将 4096 改成 32768 KB
cache_swap_low                  90
cache_swap_high                 95
maximum_object_size             4096 KB
# 与内存保存数据有关的设定
maximum_object_size_in_memory   8 KB
# 我们经由 dns 正反解以及 IP 的结果,记录在暂存区啊!
ipcache_size                    1024
ipcache_low                     90
ipcache_high                    95
fqdncache_size                  1024
内存的需求数量:
事实上,除了硬盘之外,内存可能是另一个相当重要的影响 Proxy 效能的因子!怎么说呢?因为 Proxy 会将数据存一份在 Cache 硬盘中,但是同时也会将数据暂存在内存当中啊,以加快未来使用者存取同一份数据的速度!所以啰,内存本来就会被 squid 的程序所消耗掉一些!一般来说,被 squid 消耗掉的内存约略每 1GBytes 的 cache_dir 空间就消耗 10MB 的内存容量,所以,如果以上面我们的设定为例 (cache1, cache2 共有 3GB), 那么就有 30MB 以上的内存被消耗掉了!除此之外, squid 程序执行当中亦会额外的消耗掉一些物理内存,这部份占用掉的内存约为 10-20 MB 。
除了这些内存是必须要的之外,您还可以额外的指定一些内存来进行比较『热门』的数据存取!也就是说,可以额外的再加一些内存来帮助 squid 工作,而不仅只是上面提到的内存使用量!那个就是 cache_mem 这个设定参数的用途啦!所以,请特别留意啊,『 cache_mem 并不是指我要使用多少内存给 squid 使用,而是指 "我还要额外提供多少内存给squid 使用" 的意思』!因此,假设我有 X GB 的磁盘快取空间,而且 squid 程序使用掉 15 MB 的内存,那么我 squid 使用掉的内存就有:
X * 10 + 15 + "cache_mem 设定值"
您可以自行计算一下您的 squid 消耗掉多少内存喔!此外, squid 官方网站建议您的物理内存 (不含 swap 的内存容量) 最好是上面数值的两倍,也就是说,假如我的快取容量为 3 GB , cache_mem 设定为 16MB ,那么我的 squid 至少会消耗掉 3*10+15+16 = 61MB,则我的物理内存最好至少要有 122 MB 以上,才会有比较好的效能!当然,这个单指Proxy 部分而已,如果您的该部主机还有负责其它的工作,呵呵!那么内存就得在累加上去啦!一般来说,如果您的 Proxy 很多人使用时,这个值越大越好,但是最好要符合上面的需求!
 
关于磁盘容量的设定:
请注意,如果您的磁盘快取空间额满了,那么您的 squid 也就『挂点』了!因此,请随时注意你的磁盘快取空间!但是,要我天天去注意 squid 的 cache_dir 里面的容量,也太劳神了吧?!这个时候就必须要『cache_swap_low, cache_swap_high 』这些设定的帮忙了!如果以上面表格的设定为例时,他的说明是『当我的快取目录所占容量为总快取量的95% 时,那么我的 squid 将会自动的将快取目录内的容量减低至剩下 90% 的容量!』注意,那个 90 与 95 为百分比例喔!以我们的设定为例,我的 cache_dir 总共有 3GB ,那么当快取空间被使用了 3*0.95=2.85GB 时,我的 squid 会自动的将 2.85GB 里面较旧的数据删除,使快取目录内剩下 3*0.9=2.7GB 的空间!这样能了解了吧?请特别注意,如果您的 proxy 容易很多人同时上线时,请将这两个数值更动一下,例如变更为 70 85 ,为什么呢?万一您的使用者突然间都上线了,然后下载大量的档案,那么『瞬间』可能会使您的 cache 目录超过额度,导致 cache 死掉!所以降低 cache_swap_high 对于大型 proxy 是有需要的!
 
是否需要记录捉到的数据:
还有一个小问题要说明的,是否使用者要求过的数据我都要记录呢?呵呵!那当然不是啦!如果都记录的话,万一像最近好多 Linux distribution 都释出了他们新版的 LinuxISO 档案,那些档案一个都有 600 MB 以上的容量,万一使用者下载个几个这样的档案,我们的 Proxy 想不爆掉都很难~所以这个时候就要限制一下需要记录的『最大档案』啦!在预设的情况下,我们的 squid 对于超过 4MB 的档案是不记录的(就是不放入 cache 的意思),但是如果您的硬盘够大的话,我都喜欢将这个数值调大一点,为什么呢?万一我的使用者常常下载一些 10~20 MB 的套件档案,难道我每次都要到官方网站去下载一次吗?当然我不想这样啊!所以我通常将这个数值调大到 32MB ,或者是 32768 KB 啰!除了磁盘快取之外,内存的快取可以记录的最大档案容量也可以修正一下喔!但是我们的内存可就珍贵的多了!不要开太大,大约默认值就很不错了!
 
关于IP 与完整主机名称的纪录:
如果能将 IP 与主机名称记录下来的话,搜寻的脚步也会加快一些的!所以以上面的表格为例,我们分别开启了 ipcache_size 与 fqdncache_size( 后面接的数值是 bytes )的记忆容量,由于这些数据都是 ASCII 的数据,用不了什么空间,因此 1024 bytes 已经足够了!至于后面的 low 与 high 则与前面说明的相同!