服务器架设篇 - RedHat 9

第二十五章、简易 Proxy Server 架设

代理服务器 squid 设置

最近更新时间: 2004/11/12

本文数据主要针对 RedHat 9 的系统进行说明,要注意的是,RedHat 9 与 Red Hat Enterprise Linux (RHEL) 是完全不同的东西!RedHat 9 在 2003 年推出,在 2004 年就不再维护了!这部份网站更新到 2005 年,也没有再维护过! 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 9 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
代理服务器的功能可多的呢!在中大型的企业当中,可以借由单点对外的 Proxy 主机来达到『节省带宽』的目的,同时,也可以通过这样的 Proxy 架构来达成『高端防火墙』的设置,这里的『高端』指的是 OSI 七层协定里面比较高端段的层级,那就是应用与表现层方面的防火墙啦!那如果对于小型的企业呢?这个 Proxy 也可以达到分流的作用,让不同的目标网站可以通过不同的上层 Proxy 来取得数据!啊!真是很不错的一个服务器啊!不过,这个 Proxy 服务器也是几个常见的服务器里面,硬件要求相对比较高的一个咚咚!因为 Proxy 要求的是『快速』,所以呢,呵呵!当然硬件等级的要求是相当的『蛮像一回事』的!^_^

原理:

    代理服务器的原理其实很简单啦!就是以类似代理人的角度去取得用户所需要的数据就是了!但是由于他的功用,使得我们可以通过代理服务器来额外的达成防火墙的功能!此外,也可以借由代理服务器 ( Proxy ) 来达成节省带宽的目的,以及加快内部网络的 WWW 访问速度!总之, Proxy 对于大型的企业来说,实在是一个很不错的东西啊!
     

    什么是代理服务器
     
    在真实世界中,我们或许会帮忙家人去办理一些杂务吧!举个例子来说,例如缴费或者是申办提款卡等等的,那么由于你并不是『申请者本人』而是『代理人』的角色,因此有时候会需要秀出一些证件就是了。那么在网络上面的代理服务器是怎么回事呢?他就是 Proxy Server 啰!他最主要的功能就如同我们上面提的真实世界一样, Proxy 会帮 Client 端的用户去向目的地取得用户端所需要的数据。所以,当 Client 端指定代理服务器之后,您的所有相关要求( 例如 WWW 的要求 )就会通过代理服务器去捉取啰!整个代理服务器与用户端的相关性可以由下图约略看出一个端倪:
     

    图一、代理服务器的示意图
     
    在内部的电脑都是通过 Proxy 来向 Internet 求取数据的,这就是所谓的『代理服务器』啦!当然,上面的架构仅只是一个案例,还有相当多的非 Intranet 的 Proxy 架构,亦即是你的 PC 与 Proxy 均在 Internet 上面,但是您一样可以通过这个 Proxy 来帮您达到代理人身份的目的呢!
     
    在 Proxy 与 Client 的相关性当中,您必需要了解的是:您向外部要求的数据事实上都是 Proxy 帮你取得的!怎么说呢?举个例子来说,假如我在我的浏览器 ( 假设是 Netscape 好了 )设置了我们学校的代理服务器主机 proxy.ncku.edu.tw 做为我的 Proxy 好了,再假设我的 IP 是 140.116.44.125 ,那么当我想要取得奇摩网站的新闻信息时,事实上,都是 proxy.ncku.edu.tw 帮我去取得的,所以在奇摩的网站上面看到向他要求数据的人是谁呢?呵呵!当然就是 proxy.ncku.edu.tw 而不是我 140.116.44.125 啰!这样可以了解 Proxy 的功能了吗?
     
    除了这点功能之外, Proxy 还有一个很棒的额外功能喔,那就是防火墙的功能!怎么说呢?看一下上面的图标,您可以发现一件事情,那就是 Client 端的个人电脑要连上 Internet 一定要经过 Proxy 服务器,并且,如果有人想要入侵你的系统时,由于你的 proxy 在最外部啊,所以攻击者就会攻击错方向,如此一来,不就比较安全!此外,由于整个 Intranet 对外都是经过 proxy ,也就是『单点对外』的情况,这种状态底下要来管理防火墙也是比较简单的喔!^_^
     

    代理服务器的运作方式
     
    了解的 Proxy 的功能之后,我们来谈一谈那么 Proxy 到底是怎样运作的呢?为何他会有『加快网络访问效率』的情况?这就必需要以底下的图标来说明了!
     

    图二、代理服务器的运作方式流程图
     
    当 Client 端设置了代理服务器之后,在 Client 端想要取得 Internet 上面的信息时,他是这样取得数据的 (注:那个 Cache 表示为 Proxy 主机的硬盘的意思 ):
     
    一、Proxy 有用户预计要求的数据时( Step 1, 2, 3,4 ):
    1. Client 端向 Server 端发送一个数据需求封包;
    2. Server 端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,或者说,来源与目标网站我们的 Proxy 都能帮忙取得数据时,那么 Server 端会预计开始替 Client 取得数据。这个步骤中比较重要的就是『比对政策』啦,有点像是认证的感觉啦;
    3. Server 首先会到自己的硬盘里面,也就是所谓的 cache (缓存) 查看一下有没有 Client 端所需要的数据,如果有的话,那就将数据直接送到 Client 端 (步骤4) 而不经过向 Internet 要求数据的进程;
     
    二、Proxy 没有用户预计要求的数据时 ( Step 1, 2, 3, 5, 6, 2, 3, 7 ):
    1. 在经过 1, 2, 3 查寻知道 cache 没有数据,或者数据过期之后, Proxy 会向 Internet 上面的目标网站要求数据;
    2. 在将数据取回之后, proxy 会先将取得的数据『保存一份到 cache 当中』;
    3. 最后才将数据传回给 Client 端使用。
     
    整个 Proxy 的工作流程就是这个样子,所以,我们就可以知道的是, Proxy 对于 cache 的速度是很要求的,而这个 cache 就是硬盘啦!当然,硬盘容量必需要足够大,而且还要『足够快』才行!因为由上面的流程当中,我们不难发现, Cache 是一直被重复访问的一个地方喔!所以硬盘的好坏就差别很大啦!可以说他是影响一个 Proxy 性能好坏的关键点呢!
     

    代理服务器的用途与优缺点
     
    一般来说,代理服务器的用途主要有两个:
     
    • WWW 网页代理人:最主要的用途当然就是做为网页数据取得代理人啰,也就是说, Proxy 可以帮我们取得 Internet 上面的 WWW 数据就是了!那么能不能取得其他非 WWW 的数据呢?那就不一定了,要看 Proxy 主机是否有设置该服务。一般来说, Proxy 主要还是针对 WWW 网页的代理取得;
     
    • 做为 Intranet 的单点对外防火墙系统:就如同前面的图标, Proxy 如果架设在 Intranet 对外的连接点上面,那么他就可以被用来做为『应用层』阶段的防火墙了!而且,这个时候不需要设置 NAT 就可以让 Intranet 内部的私有 IP 的电脑连接上 Internet 了!这是因为您想要的数据是向 proxy 要求,所以真正去取得数据的人是『Proxy』而不是你的电脑啊!所以,只要 Proxy 可以接受私有 IP 的电脑要求,那这些私有 IP 的电脑就可以连上 WWW 啦!不过,也由于 Proxy 为一个 应用层 阶段的防火墙系统,所以,他并无法进行较低级的封包过滤!因此,在内部电脑想要通过 Proxy 来取得邮件、或者是其他的服务,呵呵!那就比较麻烦,简直就是麻烦的多啦!
     
    由于 Proxy 的这种特性,让他很常被使用于大型的企业内部,因为可以达到杜绝内部人员上班时使用非 WWW 以外的网络服务,而且还可以监测用户的数据要求流向与流量呢!很不错吧! ^_^好了,接下来我们来谈一谈 Proxy 主要的优缺点吧:
     
    • 快速的访问动作:一般来说, Proxy 主机的带宽以及硬件配备会比较高档!所以 Proxy 最大的优点就是可以提供用户端较为快速的浏览!咦!但是我们向 Proxy 要求数据的时候, Proxy 不是会自行再保存一份吗?这样不是会多花很多时间?是这样没有错,但是,换一个角度来想,如果在第一位用户要求过 A 数据后,由于 Proxy 就会自动放一放 A 数据在 Cache 当中,之后的所有用户只要是重复要求这个 A 数据, Proxy 可以立刻将数据传给用户,您瞧!这样这个 Client 等于是直接向 Proxy 取得这份 A 数据了!是否更加的快速!这是因为 Proxy 就在您的 Intranet 之内,传输速度可是相当快的!这也就是说:如果您要设置代理服务器的时候,一定要找距离我们的机器最近的那一部,否则就没有达到代理服务器的功用了!通常快速的访问动作最明显的大概是连去国外的网站了!这里要强烈的建议,如果你需要连上国外的网页,请一定使用代理服务器,因为不但可以节省带宽,并且速度上会快上很多很多 ( 例如美国环保署, EPA 网站! )
     
    • 降低网络的负荷:由于我们是向代理服务器要求数据,如果代理服务器内刚好有你要的数据,将会直接传给你,则你的要求将不会到真实的那一个网页去 ( 除非你在 IE 内按下『刷新』这个按钮 ) ,而如果没有你要求的数据,那他也会去捉一份你要的数据给你,并存下来,以后如果有与你相同需要的用户,那他就可以直接发送给用户,如此当可降低网络的负荷!(也就是上面图二的 step 1, 2, 3, 4 )
     
    • 数据分流:由于各家 ISP 对于不同国家的带宽是有差异的,因此,假设如果您要去美国时使用 Proxy1 速度较快,而 Proxy2 则是去日本比较快,至于台湾本地则 Proxy3 较快,如此一来,我们可以通过设置将不同目标的代理服务器分开来,以达到分流的目的!则你的网域中将可以达到很好的分流效果,网络『感觉上』会比较快速喔!
     
    • 提供防火墙内部的电脑连上 Internet:这个是一般企业比较常用的情况!由于企业内部害怕被黑客侵入,通常会设立一些比较严密的防火墙,然而如此一来公司内部的电脑可能面临无法连上 Internet 的窘境,那使用 proxy 让你的内部电脑可以通过这一架主机的代理服务而取得 Internet 上的信息,就是一个很好的方法啦!
     
    • 多层次的管道 ( 上层代理服务器 ):代理服务器可以提供多重的管道设置,例如,当你需要国内的数据时,代理服务器将直接去捉取,而需要国外的数据时,才连到上一层的代理服务器!如此将可达到你的需求 ( 而不用常常在你的 IE 等浏览器上更改所需的代理服务器 ) ,这个部分我们在底下还会进行额外的说明。
     
    有利就有弊,当然 Proxy 也不是万能的天神~他有什么可能潜藏的缺点呢?
     
    • 容易为 Intranet 的内部人员滥用:因为 Proxy 是对内部的电脑捉取数据 ( 当然也可以对 Internet 上面的用户捉取数据啦! ) ,而且在 Internet 上面看到的实际上是你的 Proxy 在捉数据喔!如果你的用户大量的以浏览器下载 A 图啊,还是通过你的 Proxy 干坏事啦,这样一来可就累了~因为实在不容易轻易的管理!所以,为了杜绝这个状况,强烈的建议多加安装注册表案分析的软件,在管理上面会轻松很多喔!
     
    • 需要较高超的设置技巧与调试进程:在鸟哥设置过的 Server 当中, Proxy 算是比较不容易设置好『性能』的一个服务器了!由上面的传输过程中,您不难发现 Proxy 的 Cache 与他的『上层代理服务器』的关系是很紧密的,万一设置错误的话,很有可能反而让您的 Proxy 拖垮 WWW 的浏览速度!最严重的是造成无法连接 ( 在上层 Proxy 与您的 Proxy 之间构成 loop 而跑不出去! ),因此,这对于管理员来说是比较困扰的一件事。
     
    • 可能会取得旧的错误数据:由前面的 Proxy 运作过程当中不难发现,Client 端向 Server 端求取数据时,Server 会先向自己的 cache 查寻,如果有该索求数据,就立即将数据送给 Client 。现在假设个例子来说明,万一我的网页三天两头改变一次,那么那个 cache 事实上并没有天天更新啊!这个时候, Client 端所取得的数据就有可能是网页修改之前的旧数据咯!所以,用户得常常按下『更新』才能取得新的数据啊!
     
    总之, Proxy 的优点是很多的,但是缺点却需要网管人员的操心啊!
     

    什么是上层代理服务器?哪里有上层代理服务器
     
    什么是上层代理服务器:
    好了,上面提到过所谓的『上层代理服务器』这又是什么咚咚?事实上,上层代理服务器就是一个 Proxy 啦,只是,我们自己设置的这个区域 Proxy 会将自己当作 Client 而去要求另外一个 Proxy 求取数据来给我们的用户就是了!整个流程图可以这样看:
     

    图三、上层 Proxy 示意图
     
    就是我们的 Local proxy 并不会主动的去捉数据,而是通过『上层代理服务器』去向 Internet 要求数据!这样有什么好处呢?刚刚上面也曾经提过了,由于这些上层代理服务器才是真正对外带宽最大的几部机器之一,所以通过他来要求数据一定又比我们的 Local proxy 还要来的快啊!所以我当然会喜欢设置上层 Proxy 噜!这个现象最常发生在对国外的连接上面,有没有设置 Proxy 差异是相当大的呢!上层代理服务器除了带宽更大之外,还有没有什么好处啊?当然有,最大的好处就是达到分流的效应!例如下图的说明:
     

    图四、上层代理服务器的分流动作示意图
     
    我总共设置了三个上层代理服务器,由于这三个代理服务器对外的速度都不相同,所以,当我要去美国时,就以 Proxy1 来要求数据,要连欧洲就以 Proxy3 ,至于要连日本,就以 Proxy 2 来要求我所需要的数据,如此一来,呵呵!可以让我的 Proxy 达到最佳的性能喔!很不错吧! ^_^!所以上层代理服务器是很重要的呢!
     
    哪里有上层代理服务器?
    目前有哪些流量大、然后又开放出来的 Proxy 呢?我这里举几个网页给大家参考参考:
       
    由前面的介绍中,我们不难发现 Proxy 有可能会被 Client 端过度的滥用,同时也有可能会被拿来为非作歹啊!所以,目前绝大部分的 Proxy 已经『停止对外开放』了,仅针对自己的网域内的 Client 提供 Proxy 的服务而已~因此,如果您要自行设置 Proxy 的时候,请记得去您当初申请网络的 ISP ( 如果是学术单位,就到上面介绍的学术网络查看看即可!) 查寻一下,才能比较有效的设置好您的主机喔!因为设置错误的话,呵呵!上层 Proxy 根本不提供服务,或者是上层 Proxy 的性能并不好,那个时候您的 Proxy 也会连带的受到很大的影响啊!慎选!慎选!
     

    我是否一定要设置 Proxy ?
     
    话又说回来,到底我应不应该设置 Proxy 呢?还是得由理论与实际上的状态来进行说明。事实上,我们的 Proxy 感觉上会加快传输的速度,主要的因素是来自于 cache 已经记录了一份数据了,所以 Client 端取得的其实是这一份数据,而不是真的来自于 Internet 上面的即时数据!这样的好处前面提过了,就是可以增加内部网络传输的性能啊!但是,这要在一个前提之下,就是我的用户很多时,那么由于来自四面八方的人会四处去求取数据,让我的 Cache 拥有较大的数据库,那么内部传输的速度自然就会有所助益!所以,要架设 Proxy 的情况可以是:
     
    • 我的 Client 端用户不少,而且大部分仅需要 WWW 这个网络服务而已;
    • 我的 Proxy 还兼做防火墙的任务;
    • 我的 Client 端常常需要连接到传输速度很慢的网站,例如国外的网站;
    • 我的 Client 端常常浏览的网站是『静态』网站,而不是动态网站(例如讨论区的 PHP )。
     
    相反的来说,要是 (1)我的 Client 端很少,那么每次上去 WWW 都是求取新的数据,有没有 Proxy 反而看不出效益~此外,(2)Proxy 由于属于应用层了,对于 Internet 的规划上弹性较不足!不像 NAT 主机可以进行很多的功能!(3)我常常上的网站是类似讨论区那种一日多变的网站,在这样的情况下,实在是没有必要架设 Proxy 的!
     
    但是,如果对于学校单位那原本带宽就不足的环境中,架设 Proxy 来让校内的网络速度提升,呵呵!就是有那个必要性的啦!所以要不要架设 Proxy 呢?请好好的依据您的环境来考量喔!
     

    所需要的硬件要求与最佳硬件配置方式
     
    假设您一定需要架设 Proxy ,那么到底什么样的配备是必需的呢?我们刚刚提到 Proxy 对于硬件的要求相当的高!因为我们架设 Proxy 的目的就是希望能够加快网络的传输性能嘛!因此,虽然 Proxy Server 几乎在任何的 Linux 系统上面都能跑 ( 例如我的 P 133 MMX ) ,但是您的 Proxy Server 最好还是能有以下的硬件等级:
     
    • CPU 最好能够 P III 550 以上等级;
    • RAM 最好能够大于 512 MB ,这也是很重要的一个硬件参数!
    • Hard Disk 最好能用 SCSI 接口的,因为速度与稳定度都比较好!如果不能的话,那么 IDE 接口的硬盘由于目前速度也越来越快,所以使用 IDE 也没有问题,但是最好是『多颗硬盘』的架构,例如我总共需要 30 GB 的硬盘空间,那么最好是 10 GB 的硬盘三颗这样的架构较佳!为什么呢?由于 cache 对于 Proxy 的重要性相当的大,所以 cache 读取速度越快的话,代表 Proxy 的性能也会越好!那由于 Proxy 对每笔数据写入 cache 时,是『平均分摊在各个 cache 的目录中 』,所以当然硬盘数越多越好啰!例如我原本有 10 MB 的数据要写入 cache ,那么这 10MB 写入同一颗硬盘快?还是 10MB 被分散写入三颗硬盘,因此每一颗硬盘仅记录 3.3MB ,那一个快?当然是三颗硬盘的架构会比较快,因为我有三个磁头在帮我写入数据嘛!^_^!请注意喔!这里我们说的是『多颗硬盘』而不是『多个 Partition 』喔!因为如果我将 30GB 的硬盘切割成三块 partition 的状态下,由于还是只有一个磁头啊,所以写入的速度差异不会很大!这里要特别留意与了解呢!
    • 网络卡与网络周边最好使用 GBytes 的网络卡,当然啦,一般的公司行号应该不需要用到这样的网络卡才是!我这里指的是较高档的配备啦!
     
    事实上,最重要的还是 RAM 与 HD 这两样,当然,网络接口也绝对不能忽视就是了!针对硬盘来说,最好使用 SCSI 这个稳定的接口,当然,使用 IDE 也是不错啦!但是要注意保养就是了。此外,就如同上面提到的,在硬盘的架构上是相当的重要的!一般来说,使用磁盘数组应该是不错的想法,如果没有办法的话,使用多颗硬盘取代单颗硬盘的架构,在性能上也会有不错的显著提升呢!
     
    既然硬盘这么重要,我们也约略谈一谈硬盘的基础规划应该有哪些需要注意的呢?
     
    • 最好在架设 Proxy 时,将整体主机的规划做好,并且让 Proxy 主机的服务简单一点,就是仅负责 Proxy 就好了!
    • 每颗硬盘的容量不需要太大,大约在 9 GB 以内即可,此外,最好将硬盘分割一下,一块 Partition 差不多在 2~4 GB 之间即可,因为切太大的话数据的搜索耗费时间较长,但是 Partition 太小又可能造成空间的浪费~所以差不多的大小就限制在 2~4 GB 吧!
    • 我们刚刚上面有提过,cache 是放置在某个目录下的,而最好一个目录底下就是独立的一个 partition 。此外,由于 cache 所在的硬盘常常会有数据的访问,因此可能此一硬盘的损耗率会比较大,所以这个 cache 所在的硬盘最好不要跟重要数据文件,例如 /, /etc, /usr, /home 等等重要的系统文件放在一起,以免危险啊!
    • 也由于 cache 所在的硬盘数据访问太密集了,所以,硬盘的选择上面需要 (1)转速不能太低; (2)磁头的机械臂需要可以忍受频繁的动作; (3)发热量不可太大,或者可以考虑加装硬盘用风扇。
     

    代理服务器与 NAT 主机的差异
     
    或许您已经发现了一件事,那就是:在内部局域网路使用私有 IP 的 Client 端不论通过 Proxy 或者 NAT 均可以直接取得 WWW 这个 Internet 的服务,那么 NAT 与 Proxy 有没有什么不同的地方啊?他们不都是可以让内部的 Client 连接出去吗?其实这两个玩意儿差异性是『相当大』的:
     
    • NAT 是一个利用 TCP/IP 的 packet filter ( 封包过滤机制 )来进行封包处理的一个机制,所以他是『直接分析 TCP/IP 』,所以在设置防火墙的时候,他的弹性比较高,只要能过 NAT 这一关,那么大部分的网络服务都可以使用,因为 TCP/IP 是比较底层的协定啊!要知道的是,TCP/IP 上头还有 port 、还有 IP 等等的信息,单是 port 就可以让我们使用很多的不同的协定了!例如 port 20, 21 是 FTP 啊, 80 是 WWW 啊等等的!所以 NAT 能做的事情事很多的!
     
    • 至于 Proxy 就不一样了, Proxy 主要通过类似 Squid 这一类的软件来达成的一个服务,基本上,一般来说他是通过 port 3128 来进行数据的监听与传输,单是看到这个 port 3128 就应该要晓得他仅是一个 daemon 而已。Proxy 已经是应用层这个阶段的网络项目了,所以他并没有去分析 TCP 的封包,只要 Client 来源合乎他的需求 (例如 IP 是被支持的 ) ,那么他将通过 daemon 的功能帮用户达成用户所想要的任务!所以说,能不能做某些事情,与 Proxy 服务器上面负责的那个 daemon 是有关的!万一 daemon 无法进行 FTP 数据的取得,那么您再怎么努力的尝试上网也是枉然的啊!
     
    这样说有没有比较有点概念了呢?NAT 是由较底层的网络去进行分析的工作,至于通过 NAT 的封包是干嘛用的, NAT 不去管他!至于 proxy 则主要是由一个 daemon 的功能达成的,所以必需要符合该 daemon 的需求,才能达到某些功能!
     
    谈完了这些基本的原理之后,我们可得来玩一玩 Proxy 了吧?!事实上,目前有很多的 Proxy 软件,例如 apache 也有提供 proxy 模块的功能喔!但是,最好不要用 Apache 当作您的 Proxy server ,因为.....性能真的太差了~会让您的网络停顿的更厉害~目前 Proxy 的服务器软件当中,以 squid 这个咚咚最出名,会出名的原因是因为他的性能高!真的很不错的一套软件,所以底下我们就针对 squid 来做说明吧!

套件安装

    我们的 Proxy 服务器软件选择 squid 这个性能很高的套件来安装,目前 ( 2003/03 ) Squid 已经出到了 2.5 版了,您可以到官方网站上面下载,或者是到中山大学的 FTP 网站上面下载,底下提供一下联系的网址:
       
    同样的, squid 也有两种主要的安装模式,分别是 RPM 版本与 Tarball 版本,不过,由于我们会加入一些不同的参数设置值,所以缺省的 RPM 文件并无法满足我们的需求,除非使用 SRPM 来进行重新 configuration 的动作,否则比较不能让我们满意啦!因此,习惯上我们都是以 Tarball 的方式来进行编译、设置与安装,所以底下鸟哥会比较偏重以 Tarball 的安装来进行介绍,如果有兴趣的话,可以尝试以 SRPM 进行修订的工作喔!
     

    使用 RPM 方式安装 squid
     
    一般来说,使用您的 Linux distribution 提供的 Squid 也就够了,但是,就如同上面提到的,可能会有一些设置值您无法自由自在的设置,不过。不过,无论如何,以 RPM 来安装是最简便的啦!那么就请拿出您的原版光盘,将他 Mount 上来,查找一下是否有 squid 字样的文件名称?没错,就将他安装上去吧!目前主要的几个 distribution 都有提供这个套件,所以应该可以很快的找到这个套件才是!怎么使用 RPM 呢?没这么难吧!
     
    [root@test root]# rpm -ivh squidxxxxxxx
     
    一再地强调, RPM 是粉重要的,请好好的使用他吧! ^_^!这个指令就安装完毕啰!只是要注意的是,由于 squid  2.2 版以前的设置与 2.4 版以后的设置差异性很大,所以请特别留意您的 squid 版本,如果是使用旧的 Linux distribution 的用户,例如 Red Hat 6.xx 版本,或者是 Mandrake 7.xx 版本,那么就不要再以 RPM 来升级了!直接使用底下的 Tarball 吧!反正才安装一个文件,还不会太难啦!
     

    使用 Tarball 方式安装 squid
     
    一般来说,我还真是蛮喜欢中山大学的 FTP 站 ( 怪了,好像一直在帮人家打广告! ^_^ ) 没办法,我们南部人嘛!当然是南部的 FTP 站比较亲切啰!这个时候,您可以直接在 Linux 底下使用 wget 来取得我们所需要的 squid 喔!目前我取得的版本是 2.5.STABLE2 版本,取得的方法如下:(注:您也可以到鸟哥的私房菜下载 http://vbird.org.cn/download)
     
    [root@test root]#  wget  \
    http://ftp.nsysu.edu.tw/Unix/Proxy/squid/source/STABLE/squid-2.5.STABLE2.tar.gz
     
    好了,这个文件应该就是 /root/squid-2.5.STABLE2.tar.gz 啰!那么就开始来给他安装吧!过程很简单啦,重要的地方只有在下达 ./configure 的地方需要很多的额外参数支持就是了!
     
    0. 解压缩:
    [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 给他安装完毕啦!很快速吧!所以我说,使用 Tarball 来安装 squid 其实是很快的,不用太担心啰!

Server 端设置:

    终于来到了主机端的设置项目啦!以下我们会分门别类的介绍各个主要的参数值,这些参数不见得适合您的 Proxy 环境,所以使用的时候敬请特别小心喔!每个项目都要好好的了解一下呐!另外,底下我主要是以 Tarball 安装的目录为主要的介绍状态,如果您是以 RPM 来安装的话,那么所有的文件原理与设置还是一样的,只不过文件存放的路径就不太一样就是了!请以 RPM 的指令或者是 locate 与 find 的方式找出来您的设置档吧!
     

    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 而已!
     

    squid 的 process owner 与 cache directory owner
      
    我们前面的原理部分稍微提过, squid 主要是以 daemon 提供的 Proxy 功能,而这个 daemon 最大的功能就是将 Internet 上面捉取的数据给他放入 Cache 目录当中啦!而由于 daemon 会产生一些 processes ( 进程 ),这些进程都会有 Owner 以及 Group 。这样晓得我要讲什么了吧?呵呵!没错,那个放置 cache 的目录 ( 底下简称 cache dir ) 的拥有者以及拥有群组就必需要与 squid 产生的 process 的拥有者与群组相同才行!而为了保险起见,通常 squid 不会以 root 来启动,最好是以 nobody 或者是一些权限比较低的系统帐号来启动他!假设我们的 squid 这个 daemon 是由 nobody 所启动的好了,而假设我的 cache dir 是放置在 /var/spool/squid 下面,则这个 /var/spool/squid 的 Owner 与 group 就必需要是 nobody, nobody 才行!这个很重要喔!因为大部分无法激活 squid 的朋友都是这个动作没有搞正确的原因啊!
     
    squid 的 Owner 与 Group 是在 squid.conf 里面设置的,而至于 cache dir 则是需要我们手动来设置好他的权限呢!
     

    最简易的 squid 设置方法
     
    设置 squid 仅要修改一个文件而已,那就是 /usr/local/squid/etc/squid.conf 啰( RPM 版本就不相同啰!请自行找出来吧! )!请注意,在这个例子当中,我们并没有介绍高档配备的设置,仅只是列出重要的设置项目还有一些观念,您所想要的设置必需要视您的主机规划而定,例如 cache dir 每个人所放置的目录都不相同啊,所以直接拿我的设置来启动时,可能会完蛋啊!请注意需要修改成您所想要的样式才行!好了,在这个小节当中,我们仅列出来几个一定要设置的参数,至于更高端的参数将留待后面分别介绍。
     
    另外要额外提醒的是,在 squid.conf 这个文件当中,缺省的情况下是『除了本机可以使用 squid 的少部分功能外,其他所有的项目都没有被启动』,所以您必需以 vi 的搜索功能找到下列的设置项目后,将注解符号 (#) 拿掉,或者是自行输入底下的设置才行喔!不啰唆,马上进行吧!
     
    [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 可以真的加快您浏览的速度啊!
     

    内存与磁盘缓存留存百分比设置
     
    内存与磁盘缓存在 squid.conf 当中的相关简易设置如下所示,至于更详细的说明则在下表之后进行解说:
     
    # 与内存有关的设置:因为我的系统很小,所以只给 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 都发布了他们新版的 Linux ISO 文件,那些文件一个都有 600 MB 以上的容量,万一用户下载个几个这样的文件,我们的 Proxy 想不爆掉都很难~所以这个时候就要限制一下需要记录的『最大文件』啦!在缺省的情况下,我们的 squid 对于超过 4MB 的文件是不记录的(就是不放入 cache 的意思),但是如果您的硬盘够大的话,我都喜欢将这个数值调大一点,为什么呢?万一我的用户常常下载一些 10~20 MB 的套件文件,难道我每次都要到官方网站去下载一次吗?当然我不想这样啊!所以我通常将这个数值调大到 32MB ,或者是 32768 KB 啰!除了磁盘缓存之外,内存的缓存可以记录的最大文件容量也可以修正一下喔!但是我们的内存可就珍贵的多了!不要开太大,大约默认值就很不错了!
     
    关于 IP 与完整主机名称的纪录
    如果能将 IP 与主机名称记录下来的话,搜索的脚步也会加快一些的!所以以上面的表格为例,我们分别打开了 ipcache_size 与 fqdncache_size( 后面接的数值是 bytes )的记忆容量,由于这些数据都是 ASCII 的数据,用不了什么空间,因此 1024 bytes 已经足够了!至于后面的 low 与 high 则与前面说明的相同!
     

    acl 的用法与用途
     
    在 squid.conf 这个文件里面最常看到的大概就是 acl 这个设置项目了!他可是整个 squid.conf 的重头戏啊!很多的来源与目的管制都是靠他来设置完成的呢!我们底下就稍微谈一谈这个重要的咚咚吧!首先,他的语法为:
     
    <acl> <acl名称> <acl类型> <设置的内容>
     
    上面那个 <acl名称> 可以想成是一个暱称就是了!别想太多~就只是一个代名词,至于 acl 类型可就有趣的多了,他主要有下面这几大类:
     
    以来源端来控制:
    • src  ip-address/netmask:主要控制『来源的 IP 地址』,例如『acl nckuip src 140.116.0.0/16』,这表示未来在 squid.conf 里面,任何使用到 nckuip 这个代名词时,就表示他是『来源为 140.116.0.0/16 的地址』!
    • src addr1-addr2/netmask:主要控制『一段范围来源的 IP 地址』,例如『acl nckuevoffice src 140.116.44.120-140.116.44.130/24』就表示 nckuevoffice 这个代名词为来自 140.116.44.120 到 140.116.44.130 之间这 11 个 IP 的要求!』请注意,是『来源』喔!
    • srcdomain .foo.com:主要控制『来源为一某个网域的电脑』的意思,例如:『acl vbirdhome srcdomain .vbird.org』,与 src 很类似,都是控制来源的用户端,只不过 src 控制的是 IP 而 srcdomain 则是控制 domain name 就是了!
     
    以目的端来控制:
    • dst ip-address/netmask:主要控制『目的端的 IP 地址』,与 src 类似,只不过是用来控制『目的端』的地址!
    • dstdomain .foo.com:这个就没问题了吧?就是用来控制『目的端的网域』啰!与 srcdomain 类似喔!
     
    以正规表示法的方式来控制
    • url_regex [-i] ^http:// :除了上面两种基本的方法之外,我们也可以使用正规表示法的方式来控制『网域』的设置值呢!例如『 acl urlname url_regex ^http://linux\.vbird\.org.* 』这表示 urlname 代表的就是来自 http://vbird.org.cn 这个网站的『任何数据』,因为『 .* 』代表任意字符的意思啊!如果仅只是一些文件名,例如 gif 这一类的文件名时,要怎么作呢?就如底下的说明啦!
    • urlpath_regex [-i] \.gif$:上面提到的是关于整个网址的名称,这里则是只要『URL 部分相同』就可以啦!例如『acl gifname urlpath_regex \.gif$ 』则是代表 gifname 代表的是 url 后面是 .gif 的网址,呵呵!那就是 gif 的图档附文件名嘛!!这样应该不难理解了吧!
     
    由于在 squid 当中很多时候都会用到一些 IP 网域啦,以及 domain name 等等的数据,这个时候这个 acl 就可以看做与 bash 里面的『变量』很类似啰!您可以参考看看的啦!只是他的用途相当的广泛,这个在底下我们会进一步的使用 acl 搭配各种设置值来进行说明的!
     

    上层 Proxy 的选择与负载分流的设置方法
     
    上层 Proxy 的设置方式: cache_peer
    我们在上面的原理部分说明过,一部有性能的 Proxy server 必须要能利用上层 Proxy 所提供的性能,才能达到我们所想要的『加速』功能!那么当然大前提之下就是需要先找到『最佳性能的上层 Proxy 主机』啰!没错!就是这样的啦!在这里,我们以成功大学的学术网络为架构进行说明,如果您的网络架构并非为学术单位的话,请依照您能找到的上层 Proxy 来进行设置喔!需要特别留意的是,由于成大有许多的上层代理服务器,这些服务器都可以做为我个人 proxy 的 parent proxy 主机,不过,由于各个主要的 parent proxy 所提供的网域服务都不尽相同,所以我们得先将主要的几个服务器对应的网域给他找出来,底下是一个例子:
     
    gate.ncku.edu.tw  主要服务 .com 的网域
    gate3.ncku.edu.tw 主要服务 .net .edu 的网域
    gate2.ncku.edu.tw 主要服务非 .com .net 与 .edu 的网域
    proxy.ncku.edu.tw 主要服务任何网址
     
    至于在 squid.conf 当中设置的参数则是『cache_peer 』这个项目,设置的样式为:
     
    <cache_peer> <主机名称> <类别> <http_port> <icp_port> <其他参数>
    类别:主要有上层(parent) 与同一层 (sibling) 两种,我们这里主要介绍的是
       上层 Proxy 也就是 parent 这一大类,如果您想要架设一个小型的 Proxy
       Cluster 的话,可以考虑组成 sibling 的功能,由于我们仅想要架设单部
       Proxy Server ,所以这里我们就不探讨 sibling 了!
    http_port icp_port:就是我们最前面设置的啦! Internet 上面缺省是
       3128 3130 这两个!
    其他参数:其他参数的部分就很重要了,主要有底下几个重要参数:
      proxy-only :只取出上层 Proxy 的 cache 给 client ,并不会将上层 Proxy
        的数据存在自己的 cache 硬盘中;
      weight=n  :权重的意思,因为我们可以指定多部上层 Proxy 主机,哪一部
        最重要?就可以利用这个 weight 来设置, n 越大表示这部 Proxy
        越重要!
      no-query  :一般来说,如果要向 sibling 要求数据时,会向 sibling 送出
        icp 的要求封包,使用 no-query 就可以取消。一般来说,如果向上层
        Proxy 要求数据时,可以不需要发送 icp 封包,以降低主机的负担
      default  :表示该部主机为缺省的 Proxy 主机的意思;
      no-netdb-exchange:表示不向附近的 Proxy 主机送出 imcp 的封包要求
      no-digest :表示不向附近主机要求创建 digest 纪录表格。
    范例:
    cache_peer gate.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
    cache_peer gate2.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
    cache_peer gate3.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
    cache_peer proxy.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
     
    基本上,由于我们向上层 Proxy 要求数据的时候,也是需要时间的,因此,这里我们建议您不要设置太多的上层 proxy 主机,一般来说, 2~4 部也就足够了,太多部 上层Proxy 的情况反而可能会拖垮您的 Proxy 速度呢!OK!既然有了上层 Proxy ,而且每一部所负责的网域并不相同,所以我们当然就需要将网域分门别类啰!如何将这些网域分门别类呢?那就需要 acl 的帮忙啦!先提醒一下,由于我们的 Proxy 旨在帮助 client 端取得数据,所以使用 acl 的时候,是针对『目标』来进行设置的,因此,使用的是 dst 与 dstdomain 喔!在这里,我们将主要的网域分成底下这几大类:
     
    0. 自己想要直接使用自己的 Proxy 捉取的数据
    acl directip dst 140.116.44.0/24
    acl directdn dstdomain .vbird.org tw.yaoo.com tw.news.yahoo.com

    1. 成大附近的网域
    acl nckudn dstdomain .ncku.edu.tw
    acl nckuip dst 140.116.0.0/16 163.28.112.0/24 163.28.113.0/24 163.28.114.0/24 163.28.115.0/24 163.28.116.0/24 163.28.117.0/24
     
    2. 台湾的网域 (请注意:底下为同一行)
    acl twdn dstdomain .tw .twnic.net .hinet.net .acer.net .wownet.net .seeder.net .silkera.net .neto.net timenet.net tw.aunet.net .adsldns.org 
     
    3. 台湾的 IP (注意:底下为同一行)
    acl twip dst 163.28.0.0/16 140.96.0.0/11 140.128.0.0/12 140.92.0.0/16 139.175.0.0/16 139.223.0.0/16 163.12.0.0/14 163.16.0.0/14 168.95.0.0/16 192.72.0.0/16 192.83.160.0/19 192.83.192.0/22 192.192.0.0/16 202.39.0.0/16 202.132.128.0/17 202.145.224.0/19 203.64.0.0/12 210.64.0.0/13 210.60.0.0/14
     
    4. 一些商业、网域、教育、以及其他的网域
    acl comdn dstdomain .com
    acl netdn dstdomain .net
    acl edudn dstdomain .edu

     
    这样子就作好了基础的工作了!接着下来,我们要开始来设置『各个主要的网域要通过哪一个上层 Proxy 来进行数据的取得?』这里就有点难度啦!得小心在意一下!我们的基本假设为这样:
    gate.ncku.edu.tw  仅负责 .com 的网域;
    gate3.ncku.edu.tw 仅负责 .net 与 .edu 的网域
    gate2.ncku.edu.tw 不负责上面的三个网域
    proxy.ncku.edu.tw 不负责上面三个网域
    这么一来,使用 cache_peer_access 这个设置项目时,我们的设置会变成这样喔!
     
    # 主要的格式范例:
    # <cache_peer_access> <上层 Proxy > <allow|deny> <acl名称>
    cache_peer_access gate.ncku.edu.tw  allow comdn
    cache_peer_access gate.ncku.edu.tw  deny  !comdn
    cache_peer_access gate3.ncku.edu.tw allow netdn
    cache_peer_access gate3.ncku.edu.tw allow edudn
    cache_peer_access gate3.ncku.edu.tw deny  !netdn
    cache_peer_access gate3.ncku.edu.tw deny  !edudn
    cache_peer_access gate2.ncku.edu.tw deny  comdn
    cache_peer_access gate2.ncku.edu.tw deny  netdn
    cache_peer_access gate2.ncku.edu.tw deny  edudn
    cache_peer_access gate2.ncku.edu.tw deny  directdn
    cache_peer_access gate2.ncku.edu.tw deny  directip
    cache_peer_access gate2.ncku.edu.tw deny  twdn
    cache_peer_access gate2.ncku.edu.tw deny  twip
    cache_peer_access gate2.ncku.edu.tw deny  nckudn
    cache_peer_access gate2.ncku.edu.tw deny  nckuip
    cache_peer_access proxy.ncku.edu.tw deny  comdn
    cache_peer_access proxy.ncku.edu.tw deny  netdn
    cache_peer_access proxy.ncku.edu.tw deny  edudn
    cache_peer_access proxy.ncku.edu.tw deny  directdn
    cache_peer_access proxy.ncku.edu.tw deny  directip
    cache_peer_access proxy.ncku.edu.tw deny  twdn
    cache_peer_access proxy.ncku.edu.tw deny  twip
    cache_peer_access proxy.ncku.edu.tw deny  nckudn
    cache_peer_access proxy.ncku.edu.tw deny  nckuip
     
    经过上面这个动作,我们就可以将 .com 的要求经过 gate.ncku.edu.tw 这一部,并且将 .net 与 .edu 给 gate3.ncku.edu.tw 来服务!此外,将没有被自己定义出来的 IP 或者是网域就丢给 gate2 以及 proxy 这两部来服务,至于我们既然是在台湾,所以自己定义出来的四个 acl 名字 (directdn, directip, twdn, twip) 当然是直接交给我们自己的 Proxy 来捉取了,相信速度上面应该不会有任何的影响的!因此,那四个主要的 acl 名称将在后面继续介绍如何不要通过上层 Proxy 来捉取数据喔! ( 请参考 always_direct 与 never_direct 的设置值 )
     
    不要进行 cache 的设置值:
    就如同我们在原理的部分提到的,有些网站的数据事实上并没有做为 cache 的需要,例如 CGI 文件就是一个很鲜明的案例!所以,一般而言, squid 在一开始就会自动帮我们设置好底下这三行:
     
    hierarchy_stoplist      cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
     
    上面这三行的意思是:『只要在网址列出现了 cgi-bin 的字样时,该网页数据就不进行 cache 的动作!』这样一来,可以避免我们的主机存放太多的垃圾啊! ^_^!当然啦,在某些时候,例如您所在的网域真的是很慢,同时又没有适合的上层 Proxy 的环境下,那么将 cgi 之类的网页 cache 下来,也未尝不是一个可以节省浏览时间的一个方法!如果确定要将 cgi-bin 底下的网页也存下来的话,那么就将上面三行注解掉啰!
     

    与时间相关的设置值 ( connect_timeout, request_timeout )
     
    由于 Proxy 的设置除了防火墙的额外功能外,最主要的目的还是在于将网页数据 cache 下来!既然如此的话,那么与 Server 的连接时间的确认就显的很重要啦!怎么说呢?万一今天您有设置三部上层 Proxy ,每一部的要求时间都控制在 5 分钟,如此一来,呵呵!万一今天刚好三部上层 Proxy 都挂点,难道我们就宿命似的要等待 15 分钟吗?当然不是啦!所以这个时候,我们可以将连接的等待时间缩短,好让 Proxy 可以发挥更为强大的功能啊!
     
    # 1. 关于 cache 的更新时间趋势
    # 我们在缓存当中的数据总是需要更新的对吧!那么如何设置更新的时间呢?
    # <refresh_pattern> <regex> <最小时间> <百分比> <最大时间>
    # 注意,那个 regex 指的是『目标』,这个『目标』大部分为网址,而这个网址
    # 使用正规表示法来表示就是了!上面的意义是说:最小的时间内 (分钟),如果
    # 文件有更动,就直接更新,或者是目标文件上次更新的时间到现在已经经过最大
    # 时间的『百分比』时,就予以更新!范例如下:
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern .               0       20%     4320
    # 第一行的意思是,如果网址裂开头是 ftp 的话,那么在一天(1440分钟)后,如果
    # proxy 再次取用这个文件时,则 cache 内的数据会被更新!

    # 2. 关于连接时间限制
    # connect_timeout 指的是连接到其他主机的时间多久之后算失败,缺省是两分钟
    #         不过我觉得我的机器连接速度还算快速,所以减低了时间
    # peer_connect_timeout 指的是连接到上层 Proxy 多久不成功就算失败,
    #         由于上层 Proxy 与我的环境息息相关,不可能连不上,
    #         所以我这里将时间调整的很短!
    # request_timeout 指的是,连接上了,但是要求的时间会多长?
    # persistent_request_timeout 指的是连续要求时间会有多长?
    connect_timeout 30 seconds
    peer_connect_timeout 10 seconds
    request_timeout 1 minutes
    persistent_request_timeout 20 seconds
    # 请特别注意喔!上面的设置当中,是因为我的环境『还算不错』,所以我将
    # 时间调整的很短,因为我晓得我的环境当中不会有花很长时间的状况,
    # 这里请依照您的网络环境来调整喔!或者干脆不要设置也没有关系!

     

    总是系统自己来捉数据(always_direct)
     
    刚刚我们在主机分流的地方有提过,有些数据我们要让我们自己的 Proxy 去捉取数据即可,而不通过上层 Proxy ,那么怎么达到这样的目的呢?也不是很难啦!就告诉 Proxy 不要去捉就好啦!怎么告诉他呢?使用 always_direct 或 never_direct 即可!
     
    # 1. 使用 acl 先定义出要直接或者不要直接去的网址或 IP ,
    #   这个部分我们刚刚在上面已经设置好了,就是 directip 与 directdn,
    #  还有 twdn 与 twip 这几个咚咚!
    # 2. 如果是直接要 Proxy 出去捉数据,可以使用 always_direct
    always_direct allow directip directdn

    # 3. 如果一定『拒绝经由上层 Proxy 出去』的话,可以使用 never_direct 
    never_direct deny twdn twip

    # never_direct allow 表示一定会经由上层 Proxy 来捉数据,
    # never_direct deny  当然就表示一定是自己向外头捉数据啰!

     
    事实上,这个东西可以让我们的 Proxy 变的很灵活!假设这样的一个案例,我们自己有一个内部的 WWW 网站,这个网站的网址为 192.168.0.100 ,如果我要经由上层 Proxy 去捉数据的话,那不就完蛋了~因为这个是『私有 IP 』的网域啊!所以,我将他写入 directip 那个 acl 的设置当中,如此一来,呵呵!我们的 Proxy 会自动的经由自己的 route table 去到内部网域读取数据给你,您根本不需要变更您的其他设置就可以自由自在的读取内部与外部的主机数据!此外,如果您发现同一网域还有其他的 WWW 主机,把这些主机的 IP 或主机名称写入 directdn 或 directip 的 acl 设置当中吧!因为在同一网域时,您自己去捉一定会比上层 proxy 捉完之后再传给你来的快吧!
     
    当然还不只如此啦,有的 WWW主机由于设置的关系,他们并不允许我们的上层 Proxy 来捉取数据,最常见的例子就是类似总图对校内的 client 端开放的图书查寻的软件了!因为如果开放了这些上层 proxy 的话,那么全台湾所有的人只要将他们的浏览器 proxy 设置为成大的上层 proxy 主机,就可以使用成大的资源了!那岂不麻烦?因为这些资源是需要花费经费的啊!这个时候,您也就必须要让这些网址经由我们的 Proxy 自己去捉取啰!这样可以了解乎!
     

    限制使用 proxy 用户与 proxy 目标的方式 (acl and http_access )
     
    既然 proxy 有一定的风险存在,自然就不能让任何人都能使用你的 proxy 主机啰!没错!所以我们必须要管制连接的用户!管制的方法真是简单的很!就是使用 acl 配合 http_access 即可!在缺省的情况中, squid 已经帮我们设置好一些安全的可以连接的 port 了,此外,也只有本机可以使用 proxy 功能呢!
     
    那么万一如果我样让内部 192.168.0.0/24 这个网域的用户可以使用我的 proxy 呢?该如何设置?呵呵!您可以这样做:
     
    # 1. 先设置这个内部网域的 acl 名称
    acl inside src 192.168.0.0/24
     
    # 2. 设置 http_access 让他可以使用
    http_access allow inside
    http_access deny  all
     
    那个 http_access deny all 是系统缺省的项目!刚刚我们在 最简单的 squid.conf 设置 时已经将他改成 http_access allow all 了!所以请记得将他给改回来啊!不然的话,您的 Proxy 很有可能会被人家利用喔!
     
    这里再提供一个值得思考的咚咚,如果您跟我一样,都是使用拨接的 ADSL ,这样一来,由于我们的 IP 都不是固定的,如果要让我们的 ADSL 拨接的 client 可以使用我们刚刚设置的 Proxy 时,该怎么办?啊!这样就不能使用『 acl 配合 src 』的设置方式了吗?呵呵!当然不是,您可以这样想像:
     
    1. 我先申请一个动态 DNS 的网域名称,例如我的 tsai.adsldns.org ;
    2. 虽然我可以直接在 squid.conf 当中设置 acl 并使用 srcdomain 来设置我的 tsai.adsldns.org ,但是很抱歉的是,如果我的 tsai.adsldns.org 来连接到 Proxy 主机时,事实上,我的拨接制 IP 反查得到的主机名称一定不是 tsai.adsldns.org ,如此一来则 srcdomain 一点用处也没有了;
    3. 再换个方式,如果我写一支 script 来侦测 tsai.adsldns.org 所对应的 IP 呢?并且将他写入一个自订的设置档当中,这样一来,这个文件会随时记录最新的 tsai.adsldns.org 的 IP ,如此一来,我就可以使用 acl 配合 src 的设置方式了!
     
    很麻烦吗?一点也不会,整个 script 可以像底下这样:
     
    [root@test root]# cd /usr/local/squid/etc
    [root@test etc]# vi squid.allow.sh
    #!/bin/bash
    # 这支程序可以用来查寻您的 IP 喔!

    # 1. 请输入您的主机名称,请注意,如果有两个以上的主机名称,
    #    请分别以空格分开各个主机名称
    hostnames='tsai.adsldns.org test.adsldns.org'
    basedir=/usr/local/squid/etc/
    email=root@localhost
    squid=/usr/local/squid/sbin/squid

    # 2. 以下为程序段,看看就好了!
    [ -f $basedir/squid.allow.hosts.raw ] || \
            touch $basedir/squid.allow.hosts.raw

    cat /dev/null > $basedir/squid.allow.hosts.now
    runornot=no

    for host in $hostnames
    do
            hostip=`host $host | awk '{print $4}'`
            if [ "$hostip" == "out;" ]; then
                    echo 'Proxy 回应:没有 DNS 的消息!' |\
                    mail -s 'Proxy 主机回应' $email
                    exit
            fi
            fileraw="$basedir"/squid.allow.`echo $host|cut -d '.' -f1`
            [ -f $fileraw ] || touch $fileraw
            hostraw=`cat $fileraw`
            if [ "$hostraw" != "$hostip" ]; then
                    runornot="yes"
                    echo $hostip > $fileraw
            fi
            echo $hostip >> $basedir/squid.allow.hosts.now
    done

    if [ "$runornot" == "yes" ]; then
            cat $basedir/squid.allow.hosts.raw >  $basedir/squid.allow.hosts
            cat $basedir/squid.allow.hosts.now >> $basedir/squid.allow.hosts
            $squid -k reconfigure
            mail -s 'Proxy 主机回应!Client IP 已经改变' $email < $basedir/squid.allow.hosts
    fi

     
    如此一来,我将可以把我的随时最新的 IP 纪录在 /usr/local/squid/etc/squid.allow.hosts 这个文件当中!那么要如何更新这个文件的内容在 squid 的设置档中呢!就这样设置即可:
     
    # 1. 先设置这个文件的名称吧!
    acl allowhost src "/usr/local/squid/etc/squid.allow.hosts"
     
    # 2. 设置 http_access 让他可以使用
    http_access allow allowhost
    http_access deny  all
     
    然后将上面这个 squid.allow.sh 给他丢进去 crontab 当中,我缺省都是在 30 分钟跑一次!
     
    [root @test root]# vi /etc/crontab
    10,30 * * * * root /usr/local/squid/etc/squid.allow.sh
     
    这样就完整的啦! ^_^
     

    额外的功能参数
     
    除了上面提到的这些关于网页缓存的功能之外, Proxy 还可以帮我们进行 FTP 的服务取得数据喔!我们可以通过浏览器,经由 proxy 提供的 FTP 功能来登录对方主机,当然,对方主机必须要能够提供匿名登录啊!好了,我们来看看要怎样设置呢?
     
    # 与 FTP 有关的设置项目,主要是针对被动式连接方式来设置喔!
    ftp_user Squid@
    ftp_passive on

    # 主要与 DNS 的设置值有关,如果在高负载的 Proxy 环境下,可以考虑将
    # dns_children 提高到 20 左右,这个值最大为 32
    dns_timeout 1 minutes
    hosts_file /etc/hosts

     
    还有一些额外的范例可以参考看看喔:
鸟哥的范例:http://vbird.org.cn/linux_server/0420squid/0420squid_vbird_ex
成大 gate.ncku.edu.tw 的 squid.conf 设置:http://turtle.ee.ncku.edu.tw/~tung/proxy/squid.conf.ncku
电机系 turtle.ee.ncku.edu.tw 的 squid.conf 设置:http://turtle.ee.ncku.edu.tw/~tung/proxy/squid.conf.turtle
台南学校范例 proxy.school.tn.edu.tw 的 squid.conf 设置:http://turtle.ee.ncku.edu.tw/~tung/proxy/squid.conf.school.tn

Client 端设置

    既然 proxy 是给浏览器用的,那么自然在浏览器上面就需要设置一些参数啰!呵呵,没错!那么如何设置呢?由于不同的浏览器在设置 Proxy 的地方也都不同,所以底下我们介绍目前比较常见的两款浏览器,分别是 Netscape 以及 IE 的设置,至于其他的浏览器,请参考各浏览器的相关说明啊!
     

    Netscape
     
    Netscape 的设置并不难,只要修改一个小地方即可!
     
    1. 打开 Netscape 之后,激活『编辑』并选择『偏好设置』项目,如下所示:

    2.  

       
    3. 在出现的画面当中,先按下『高端』左边的展开模式,然后选择底下的『代理服务器』,则画面会出现如下的模样。之后,在右边的窗口当中选择『自行设置代理服务器的组态』项目,并且再按下『查看』,则到下一步去设置:

    4.  

       
    5. 在出现的方框中,由于我们通常仅针对 WWW 进行缓存,所以可以仅针对 HTTP 的项目进行设置!在下面的画面当中,请输入『Proxy 主机的 IP 或者是 domain name 』,以及『连接的 port number』,这样就可以了。不过,如果有某些网域您想要直接让你的 PC 去捉取数据时,可以将该网域名称填写在最下方的方框中!以下面的画面为例,我的 PC 要连接到 linux.vbird.org 以及 www.study-area.org 时,就可以不通过 Proxy 啦!这个功能也挺适合可以自行调配流量、流速的朋友!

    6.  

       
    7. 再按下『确定』之后,立刻就生效了!
     

    Internet Explorer
     
    在 IE 的设置上面也一点都不难啊!
     
    1. 打开 IE ,然后在『工具』内选择『Internet 选项』:

    2.  

       
    3. 在打开的窗口内选择『连接』并点击下方的『局域网路设置』:

    4.  

       
    5. 在出现的方框中,先在下方打勾起『使用 Proxy 服务器』,然后依序在网址列填入『 Proxy 的网址或者是 IP 』以及连接端口填入『 Proxy 所开放的 port number』,如下方的设置即可。

    6.  

       
    7. 另外,如果有某些网域不想通过这个上层 Proxy 的话,点击上图的 『高端』 那一项,在出现的框框的最底下,可以填入你不想通过 Proxy 捉取的网站网址,如下所示:

    8.  

       
    如此一来则设置好了 Proxy Server 啰!

Server 端高端设置

    既然一些主机的设置已经搞定了,接着下来又是到了 Server 的安全与高端设置时间啦!那么在安全的设置方面,最重要的自然又是我们一再强调的注册表的分析啰!如何分析注册表呢?难道又要自己动手写分析的 scripts ??呵呵!不用麻烦了,我们可以使用前辈智能的结晶,直接有软件可以来进行分析喔!还有,既然强调 Proxy 可能会被滥用,所以当然要适当的管理了!这个时候的防火墙设置又要出现啦!呵呵!赶紧来看一下怎么处理吧!
     

    末端数据分析 pwebstat
     
    事实上, squid 已经有众多的注册表分析软件了,而且大多是免费的 (http://www.squid-cache.org/Scripts/) ,您可以依照自己的喜好来加以安装与分析你的 squid 喔!我这里仅介绍目前很常被使用的一套软件,也就是 pwebstats 这一套!你可以在 pwebstats 的官方网站上面查得更新的数据 ( http://martin.gleeson.com/pwebstats/installation.html )。不过,由于 pwebstats 在安装的时候需要使用到其他的函数库,因此,你必须要先安装 fly 这套软件才行啊!而在安装 fly 之前,又需要先安装一些必备的图标用的函数库才行,那就是类似 gd, libpng, zlib 等等的套件喔!听起来似乎很多东西要做,但是事实上却非常简单的啦!好吧!那么我们就一步一步的来安装这个 pwebstats 吧!
     
    安装所需要的套件数据:
    除了系统自己可能已经安装好的 gd, libpng, zlib 之外,您可以由文末提供的官方网站的链接来取得最新的 fly 与 pwebstats 套件,而如果您不需要使用最新的数据,那么也可以经由 鸟哥的私房菜 提供的比较旧的套件版本来安装 ( http://vbird.org.cn/download/ )。我这里假设您已经将所需要的 fly-2.0.0.tar.gz 与 pwebstats-1.3.8.tar.gz 套件都下载到 /root 底下了,那么您可以这样做:
       
      1. 确认一下到底有没有我们需要的一些相关套件?
      [root@test root]# rpm -qa | egrep '(^gd-|^zlib-|^libpng-)'
      libpng-devel-1.0.14-0.7x.4
      gd-1.8.4-4
      zlib-1.1.3-25.7
      zlib-devel-1.1.3-25.7
      libpng-1.0.14-0.7x.4
      gd-devel-1.8.4-4
      # 请注意,我是以 Red Hat 7.2 为例,如果您的系统并非 RH 7.2 ,那么可能
      # 套件后面接的版本会不太一样,不过,至少都需要有上面的几样套件就是了!
      # 就是 gd, zlib, libpng 这三个套件啦!有的 distribution 还会有 xxx-devel
      # 之类的名称,那个也需要安装喔!如果发现没有安装的话,请拿出您的原版光盘片,
      # 将他 mount 上之后,好好的将他搜索一下,并且安装上去吧!很重要,一定要
      # 安装这些套件之后,底下的动作才会成功呢!
       
      2. 开始安装 fly 这支程序
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/fly-2.0.0.tar.gz
      # ....会产生一个 fly-2.0.0 的目录
      [root@test src]# cd fly-2.0.0
      [root@test fly-2.0.0]# make
      注:
      # ....如果没有出现底下的字样那么就是成功了!
      /usr/bin/ld: cannot find -lttf (或者是 ljpeng ...)
      collect2: ld returned 1 exit status
      make: *** [fly] Error 1
      # 如果是出现 warning 的话,还不打紧,因为仅只是警告而已,所以问题不大,
      # 但是如果出现上面的字样时,就会连带出现第三行的 Error ,那就是编译失败了
      # 果真如此的话,请先寻找一下,以上面为例,找不到 lttf ,而 lttf 其实
      # 就是 libttf 文件名啦!(所以 ljpeg 就是 libjpeg )所以给他下达:
      loate libttf
      /usr/lib/libttf.so.2
      # 嗯!找到了!其实是 libttf.so.2 啦!如果你的系统跟我的不同,有可能文件名
      # 会不一样,所以请依照你的屏幕显示的消息来下达指令喔!但是这个编译程序
      # 有点笨,不认识这个文件,所以我们要欺骗他一下,就是下达:
      ln -s /usr/lib/libttf.so.2 /usr/lib/libttf.so
      # 这样就可以啦!如果还有找不到的文件,同样的方式给他链接一下即可!然后
      # 再次的给他运行一次 make 即可!最后会产生一个文件名为 fly 的运行档,
      # 如果没有产生运行档,那就是有问题啦!请赶紧再回头去查一查是否有某些
      # 套件没有安装,或者没有依照上面的方式创建链接文件!
       
      [root@test fly-2.0.0]# cp fly /usr/local/bin
      我们先将 fly 这支程序给他拷贝到 /usr/local/bin 这个目录去,可以直接使用
      这样就 OK 了!
       
      3. 开始安装 pwebstats 套件
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/pwebstats-1.3.8.tar.gz
      # 此时会产生 /usr/local/src/pwebstats-1.3.8 这个目录,这目录里面
      # 已经是可以运行的数据了,不需要进行任何的编译,所以我们将他直接移动到
      # /usr/local/ 里面去!
      [root@test src]# mv pwebstats-1.3.8 /usr/local/pwebstats
      [root@test src]# cd /usr/local/pwebstats
      [root@test pwebstats]# vi pwebstats <==这个是主要的运行档!
      # 由于我们的 perl 这个编程语言的运行档是放置在 /usr/bin/perl ,但是
      # 这支程序缺省是书写为:
      #!/usr/local/bin/perl
      # 将上面改写为
      #!/usr/bin/perl
      # 这样就可以了!继续下一步!
       
      4. 开始设置 squid 的输出输入参数:
      前提要件:
      a. 我的 WWW 主页目录在 /var/www/html
      b. 我的 pwebstats 整个数据库放置在 /usr/local/pwebstats
      c. 我的 squid 注册表放置在 /usr/local/squid/var/logs/access.log.0
      d. 我的 squid 的运行档为 /usr/local/squid/sbin/squid
      e. 我的 pwebstats 输出的数据放置在 /var/www/html/pwebstats 
      f. 我的 fly 是放在 /usr/local/bin/fly
      [root@test pwebstats]# mkdir /var/www/html/pwebstats<=请依您的主机而定
      [root@test pwebstats]# cd /usr/local/pwebstats/conf
      [root@test conf]# vi squid-proxy.conf  <==这个就是主要的设置档!
      # 底下请填写你的主机的『暱称』!
      server:My_Proxy_Server
      # 这个是显示在网页上面的标题内容!
      Server_header:我的代理服务器
      # squid 注册表放置的完整文件名
      logfile:/usr/local/squid/var/logs/access.log.0
      # 我们使用的就是 squid 的注册表啊!所以这里不需改变
      logtype:squid
      # 刚刚提到的,网页数据要输出到底下的目录
      outdir:/var/www/html/pwebstats
      # 一些图像文件的缺省目录,这里我们使用 pwebstats 提供的目录!
      templates:/usr/local/pwebstats/templates
      # 嗯!我们就天天来进行一次吧!可以用 weekly 或 daily
      interval:daily
      # 是否在运行的过程中给他输出消息呢?好吧!
      verbose:true
      # fly 放置的目录,刚刚我们移动的目录啊!
      fly_prog:/usr/local/bin/fly
      # 本机端的要求,这里可以不用设置喔!
      local_patt:
      # 列出几部 client 电脑?我给他来个 50 部好了!
      host_threshold:50
      # 列出几部 Server (被要求数据者),还是给个 100 部吧!
      remote_host_threshold:100
      # 统计的次数,给他 100 次好了!
      item_threshold:100
      # 做多少个 domain 的分析?给他 15 个就够多了!
      domain_threshold:15
      # 底下保留默认值即可! (最后面的 dns 反查可以启动!)
      exclude_reqs:true
      #complete_exclude_host:
      #complete_exclude_url_patt:
      #complete_exclude_user:
      dns_lookup:true
      # 事实上,只要上面粗体字的地方写对就好了!其他的保留默认值即可!
       
      5. 测试运行一次看看:
      [root@test conf]# /usr/local/squid/sbin/squid -k rotate
      上面这个动作会将 squid 的注册表进行 logrotate 的动作喔!就会更新了
      /usr/local/squid/var/logs/access.log.0 这个文件啦!
      [root@test conf]# /usr/local/pwebstats/pwebstats -c  \
      > /usr/local/pwebstats/conf/squid-proxy.conf
      .....(略)......
      -- Reading in log file /usr/local/squid/var/logs/access.log.0:
         The logfile has 27 entries.
         Processing...
         0%                     50%                      100%
         |-----------------------|------------------------|
         ##################################################
         Finished.
      .....(略)......
      呵呵!这样就是成功啦!!!!
       
      6. 将每天运行的指令写成 scripts 吧!
      # 我将他写在/usr/local/pwebstats/pwebstats.sh 这个文件当中喔!
      [root@test conf]# vi /usr/local/pwebstats/pwebstats.sh
      #!/bin/bash
      /usr/local/squid/sbin/squid -k rotate
      sync; sleep 5s
      /usr/local/pwebstats/pwebstats -c /usr/local/pwebstats/conf/squid-proxy.conf
      [root@test conf]# chmod 755 /usr/local/pwebstats/pwebstats.sh
      [root@test conf]# vi /etc/crontab 
      # 加入底下这一行吧!
      59 2 * * * root /usr/local/pwebstats/pwebstats.sh >/dev/null 2>&1
       
    很简单吧!这样就安装完毕了!不过,由于我们安装的 fly 可能有点问题啦!就我的系统来说,这个 fly 总是编的怪怪的~如果您的 fly 无法编译成功的话,那么直接由鸟哥的私房菜提供的文件来直些下载使用算了! http://vbird.org.cn/download 找一下 fly 的 binary ,下载完毕之后,请记得:
     
      gzip -d fly.gz
      chmod 755 fly
      mv fly /usr/local/bin
     
    这样就可以了!而刚刚我们不是有运行过一次吗?你的登录数据会被放置在 /var/www/html/pwebstats 这个目录当中!假如我的首页就是 /var/www/html/ 的话,那么我的网址列输入 http://myIP/pwebstats 就可以看到类似下图:
     

     
    在按下了『Day 1』之后,会出现如下的画面:
     

     
    呵呵!更详细的内容您就可以自行看看啰!加油的啦!!
     

    末端数据分析 sarg
     
    除了上面介绍的 pwebstats 之外,其实还有一套相当棒而且功能相当强悍的分析软件,那就是 Squid Analysis Report Generator ( Squid 分析报告制作者),他的官方网站在:http://web.onda.com.br/orso/sarg.html,他的原理相当的简单,就是将 logfile 拿出来,然后进行一下解析,依据不同的时间、网站、与热门网站等等来进行数据的输出,由于输出的结果实在是太详细了!所以.....呵呵!如果你是老板的话,用这个软件会让你『爱不释手』啊!因为每个人的每个小动作都会被记录下来,我的天呐!当我第一次看到这个分析的画面时,真的给他吓了老大一跳得说~因为连每个 IP 在『每个小时所连上的每个网站数据』都有纪录~~害怕了吧~
     
    不过,有优点就有缺点啦!怎么说呢?因为 SARG 功能太强大了,所以记录的『数据量』就实在是多了点,如果您的 Proxy 网站属于那种很大流量的网站时,那么就不要使用『日报表』,也就是每天产生一份报表的那种方式!那么由于数据一天可能会有几 MB 的数据,一两个月还没有关系,如果记录了几年,那么光是这些记录就会花掉好几 GB 的硬盘空间了~此外,也可以使用『覆盖旧有数据』的方式不要留存旧数据,这样也可以节省硬盘的空间啦!
     
    这个 SARG 软件已经出到 1.4 版,更好的是,他支持『多国语系』呢!目前鸟哥已经翻译了一部分的数据,希望能对大家有点帮助啊!对于这个套件,你可以到官方网站上下载最新的版本 ( http://web.onda.com.br/orso/sarg.html ) ,而鸟哥这里也有提供啦!我提供的版本是 1.4 的( 在 2003/03/16 发布的版本 ),已经经过了 patch (套件修补) 的动作,并且加入中文化的语言文件,所以直接下载就有中文显示啰!请到文件下载中心下载:
       
    整个安装与运行的过程很简单的!我们来试看看吧!(注:假设您已经将 sarg-1.4.taiwan_big5.tar.gz 放置在 /root 底下了!):
     
    # 1. 解压缩:
    [root@test root]# cd /usr/local/src
    [root@test src]# tar -zxvf /root/sarg-1.4.taiwan_big5.tar.gz
    ....(略).....
    这个时候会产生一个名为 sarg-1.4 的目录出来!
     
    # 2. 设置、编译与安装
    [root@test src]# cd sarg-1.4
    [root@test sarg-1.4]# mkdir /usr/local/sarg
    [root@test sarg-1.4]# ./configure --prefix=/usr/local/sarg  \
    > --enable-mandir=/usr/local/sarg/man1  \
    > --enable-bindir=/usr/local/sarg/bin  \
    > && make && make install
    这样可以快速的设置、编译与安装,一次完成!
    安装的数据当中:
    a. 设置档 /usr/local/sarg/sarg.conf
    b. 运行档 /usr/local/sarg/bin/sarg
    c. 说明档 /usr/local/sarg/man1/sarg.1
     
    # 3. 额外设置 ( 说明文档的路径 )
    [root@test root]# vi /etc/man.config (有时为 man.conf 文件名不同!)
    添加加这一行
    MANPATH /usr/local/sarg
     
    相信吗?这样就安装完毕了!很快速吧!接下来你要做的就是设置啰!设置之前请先注意您的相关数据,以我为例,我的相关数据为:
     
    • 注册表使用 /usr/local/squid/var/logs/access.log.0 这一个经过 rotation 的文件;
    • 计算的暂存盘放置在 /tmp 底下;
    • 我的 SARG 输出的首页放置在 /var/www/html/sarg 这个『目录』之中;
    • 我想要让我的网页以 big5 的字符编码格式输出!
     
    这个时候我只要修改一个文件,也就是 /usr/local/sarg/sarg.conf 即可,内容有点像这样:
     
    [root@test root]# mkdir /var/www/html/sarg
    [root@test root]# vi /usr/local/sarg/sarg.conf
    # 这个文件是 sarg 的设置档,里面已经将整个设置参数讲的很清楚了,
    # 你可以依照你的情况来调整这个文件的参数,无论如何,这个文件里面
    # 应该至少要有底下这几个数据,其他的请自行使用喔!
    language Taiwan_big5
    access_log /usr/local/squid/var/logs/access.log.0
    title "Squid 使用状态报告"
    temporary_dir /tmp
    output_dir /var/www/html/sarg
    overwrite_report no
    mail_utility /bin/mail
    topsites_num 100
    exclude_codes /usr/local/sarg/exclude_codes
    max_elapsed 28800000
    charset big5
     
    [root@test root]# /usr/local/sarg/bin/sarg
    SARG: 制作报告完成于 /var/www/html/sarg/2003Apr10-2003Apr11
     
    试跑一下,嘿嘿!已经成功的输出数据啰!这个时候,请在您的浏览器上面输入 http://your.domain.or.IP/sarg 即可看到刚刚跑出来的数据了!很棒吧!好了,我总不能常常这样手动的跑分析数据吧?OK!那么怎么将这个动作放到 crontab 当中呢?!呵呵!我们底下写了一支 script 来同时跑 pwebstats 及 SARG 这两个玩意儿~这支 script 是长这样的:
     
    1. 创建这支程序: 我将他取名为 /usr/local/squid/etc/squid.logrotate
    [root@test root]# vi /usr/local/squid/etc/squid.logrotate
    #!/bin/bash
    # 这支程序是要写来做为 squid 的 log files analysis 之用的!
    # 运行的方法为 crontab 啰!
    # vi /etc/crontab 加入底下这一行:
    # 59 23 * * * root /usr/local/squid/etc/squid.logrotate
     
    # 1. parameters settings
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
     
    # 2. stoping and rotating squid
    sleep 50s
    /usr/local/squid/sbin/squid -k rotate
    /usr/local/squid/sbin/squid -k shutdown
     
    # 3. pwebstats processing
    /var/www/html/pwebstats/pwebstats -c  \
            /var/www/html/pwebstats/conf/squid-proxy.conf \
            > /dev/null 2>&1
     
    # 4. sarg processing
    /usr/local/sarg/bin/sarg > /dev/null 2>&1
     
    # 5. starting squid
    sleep 11s
    su nobody -c "/usr/local/squid/bin/RunCache &" > /dev/null 2>&1
     
    # 2. 改变文件权限与加入 crontab 调度当中!
    [root@test root]# chmod 744 /usr/local/squid/etc/squid.logrotate
    [root@test root]# vi /etc/crontab
    加入这一行:
    59 23 * * * root /usr/local/squid/etc/squid.logrotate
     
    这一支程序有什么特点呢?由于我是在 23:59 开始运行,而且运行时期先等待 (sleep) 50 秒钟,且工作完毕后再等 10 秒钟,也就是说,我的 squid 的 log 文件一定会是以天为单位来分隔,所以我们所看到的数据就会『一」天一天』的显示,而不会跨了不同的两天了!我是比较喜欢这样啦!但是每个人的观点不同,您可以自由调配喔!
     

    防火墙的规划
     
    事实上, Proxy 本身就已经可以做为一个防火墙啦!为何还需要针对 Proxy 来进行防火墙的规划?话是这样没错啦!但是我们的 Proxy 是开放 3128 与 3130 这两个 port 啊!您总不能这两个 port 没有开放吧!所以啰,要让您的 Proxy 可以对外面开始服务,就需要激活 3128 这个标准的 Proxy port 啰!所以需要在您的防火墙 scripts 当中加入这一行:
     
      /sbin/iptables -A INPUT -p TCP -i eth0  --dport 3128:3130 -j ACCEPT
     
    一般来说,这样就可以正常的启动 Proxy 的服务了!那么至于 Proxy 本身提供的防火墙内容呢?呵呵!就利用 acl 配合 http_access 就能够管制用户的使用空间了!真是相当的具有弹性啊! ^_^
     

    NAT 与 Proxy 通过 transparent proxy 设置加快网络传输
     
    让我们现在来想像一个连接状态,就是你有一整组内部网络,而这个内部网络都是通过 NAT 主机连接出去的。那么我们谈过,就是在一个内部网域很大的情况下,使用 Proxy 是一个很不错的选择,因为至少他可以减轻带宽的负荷啊!OK!那么我们就架设 Proxy 好了,不过,遗憾的是,架设 Proxy 的时候,也要用户在浏览器上面设置了你架设好的浏览器才有用啊!否则那部 Proxy 没有人使用的话,架了也是白搭!好了,那么有没有办法在『用户不需要在浏览器上面进行任何设置,就可以实现以 Proxy 帮助用户捉取 WWW 数据 』呢?当然有啦!那就是 Transparent Proxy 啦!也有人翻译成『通透式代理服务器』,为什么这么翻译我也不晓得??不过,他的原理是这样的:
     
    • 当用户经过 NAT 服务器来连接进入 Internet 时,假如使用的 Internet 协定为 80 (也就是 WWW) ,那么就将这个要求交给 Proxy 来工作,以达到代理服务器的功能。
     
    呵呵!也就是说,当用户是经过 NAT 主机连接出去时,只要让 NAT 主机发现『咦!你是要去捉 WWW 的数据对吧!好!那么这个动作由 Proxy 主机帮你搞定!』如此一来,用户根本就不需要在浏览器上面设置 Proxy 的相关数据,因为这个动作是『由 NAT 主机自己决定的』,所以只要在 NAT 主机上面设置妥当即可,用户不必设置任何数据呢!呵呵!真是不错!那么要怎么进行呢?只要两个步骤即可:
     
    1. 设置 Proxy 主机:

    2. 设置 proxy 主机当然就是要又修改 squid.conf 啰!而这个设置相当的简单喔!只要几行就可以搞定:
       
      [root@test root]# vi /usr/local/squid/etc/squid.conf
      # 这里请填入你的 Proxy 主机名称 与 port !
      httpd_accel_host vbird.adsldns.org
      # 因为我们是要进行 WWW 的数据缓存,所以 port 当然就是 80 啰!
      httpd_accel_port 80
      # 这个很重要!因为设置 httpd_accel_host 之后, cache 的设置会自动被终止,
      # 必须要加上这个设置为 on 之后,才能提供 cache 的功能!
      httpd_accel_with_proxy on
      httpd_accel_uses_host_header on

      [root@test root]# /usr/local/squid/sbin/squid -k reconfigure

       
      总共就是这四行啦!这样就设置好一个 squid 的 transparent proxy 的功能啰!
       
    3. 设置 NAT 主机的 port map :

    4. 再来让我们到 NAT 主机上面看看先,因为需要将 80 这个 port 交给 Proxy 的 3128 来帮忙协助,所以你的防火墙 script 必须要加入这一段才行:
       
      iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.0.0/24 \
      --dport 80 -j REDIRECT --to-ports 3128
       
      注意一下,那个 eth0 是『你的 NAT 对内的网络卡设备代号』,至于 192.168.0.0/24 则是你的内部网域,请依照你的主机实际状态来设置喔!
       
    完全不需要怀疑!这样一来,您的 client 端完全不需要进行任何的设置,立刻就可以使用 Proxy 的好处啰!很不错吧!呵呵!
     

    squid 的注意事项
     
    使用代理服务器后,浏览国外的网页应该是可以变快的!但是,你要小心几件事:
     
    1. 若 squid 内设置的使用空间满了,则 squid 将不会运作!
    2. 若 squid 的纪录档太大了,则工作效率会变慢!
     
    由于我们已经安装的 pwebstats 了,并且已经设置好了 squid -k rotate 的工作,所以第二个问题并不严重,严重的可能会是第一个问题!所以有可能我们会自行手动的删除 Proxy 的缓存目录,如何删除呢?虽然上面已经提过了一些注意事项,这里我们再次的说明吧!
     
    1. 停止 squid 
    [root@test root]# kill -9 `cat /usr/local/squid/var/logs/squid.pid`
    (可能会重复做 5 次左右才会完全砍掉!)

    2. 删除暂存目录 (这个目录请依您的系统而定!)
    [root@test root]# rm -rf /usr/local/squid/var/cache1
    [root@test root]# mkdir /usr/local/squid/var/cache1

    3. 重建缓存目录并重新启动
    [root@test root]# /usr/local/squid/sbin/squid -z
    [root@test root]# su nobody -c "/usr/local/squid/bin/RunCache &"

     
    其他的建议:
       
    1. 关于上层代理服务器:用 cache_peer 设置上层代理服务器的数目不要太多,只要 2-5 个之间就好了,而且上层代理服务器一定要找距离你最近,并且具有较大带宽的主机,如果是在台南,那 proxy.ncku.edu.tw 就是不错的主机,或者向您的 ISP 询问喔;

    2.  
    3. 关于暂存目录的设置:以 cache_dir ufs 设置的目录,最好是单独割出来的约 1-2 GB 的硬盘槽,以我为例,我将另外一台主机的 30GB 的硬盘割两槽给 proxy 用,而每一槽只有 2GB ,分别命名为 proxy1 与 proxy2 ,则可以写成
      1.  
        cache_dir ufs /proxy1 2000 16 256
        cache_dir ufs /proxy2 2000 16 256
         
      由于分成两槽来访问,所以整体效率上会比较好,但这是针对一般比较大型的代理服务器的设置了,我们这个小主机就不用如此设置(但是效率真的有差哩!)。
       
    4. 善用 acl, always_direct, never_direct:就如同上面提到的,因为你的目的不同,所以会使用到不同的 proxy 作为你的上层代理服务器,如果你发现你的上层代理服务器无法针对你常上的网站来求取数据时,就将那个网站加入你的 always_direct 吧!另外,也可以使用 cache_peer_access 来处理喔!

    5.  
    6. 在 ./configure 的时候增加 --enable-async-io=80 这一个指令:基本上,增加这个指令之后,将可以使您的磁盘多一个 type ,亦即是 aufs ,这个 type 的速度较快!

重点回顾

  • 代理服务器 ( Proxy ) 最大的功能是在代理用户向 Internet 要求 Web page 的数据,同时达成 Web pages 的缓存记录 (Cache) ,以达到假性的带宽节省目的;此外,还可以额外的达成防火墙的功能;
  • 目前 Unix Like 的机器中,做为 proxy 功能的服务器软件几乎都是使用 squid ,而 squid 仅需要设置 squid.conf 这个设置档即可使用;
  • 设置 Proxy 时,如果能以带宽更大的上层 Proxy 来帮助,将有助于 Client 端浏览速度的提升;
  • 以防火墙的功能来说, Proxy 使用应用层的方式来达成防火墙功能,至于 iptables 则是更为底层的 TCP/IP 分析的方式;
  • Proxy 对于硬件的要求较高,尤其是硬盘的 partition 与内存,一般来说,一个 cache 目录最好就是一个 partition ,而一个 cache partition 最好容量在 2-4 GB 之间即可;
  • transparent proxy 的功能就是可以让 client 端不需要设置浏览器的 proxy 功能,即可进行 proxy 的工作;

参考资源


本章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)

  • 请说明为何 Proxy 可以提升网络的 WWW 浏览速度?
  • 万一 squid 发生了问题,请问我该如何找出问题点?
  • 请说明 Proxy 服务器的功能为何?
  • 试说明为何 Proxy 服务器可以提升网域之内的网络安全性?

  • 前往参考用解答
修改历史:
2001/??/??:第一次完成日期,其实已经忘记了~
2001/11/09:加入增加 Proxy 性能的方法,就是使用多颗硬盘做成的数据保存方式!
2003/04/04:完成大幅度的改写动作!加入了完整的 Proxy 说明,与 pwebstats 的架设!
2003/04/11:完成了另一个末端分析的强大软件 SARG 分析套件
2003/09/16:微幅调校一下版面!
2004/11/12:修订 transparent proxy 的设置问题, httpd_accel_with_proxy on
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计