鸟哥的 Linux 私房菜
为取得较佳浏览结果,请爱用 firefox 浏览本网页
目录 | Linux 基础文件 | Linux 架站文件 | Linux 企业运用 | 新手讨论 |
     
 
简易 Proxy Server 架设
最近更新日期:2004/11/12
 
代理伺服器的功能可多的呢!在中大型的企业当中,可以藉由单点对外的 Proxy 主机来达到‘节省频宽’的目的,同时,也可以透过这样的 Proxy 架构来达成‘高阶防火墙’的设定,这里的‘高阶’指的是 OSI 七层协定里面比较高阶段的层级,那就是应用与表现层方面的防火墙啦!那如果对于小型的企业呢?这个 Proxy 也可以达到分流的作用,让不同的目标网站可以透过不同的上层 Proxy 来取得资料!啊!真是很不错的一个伺服器啊!不过,这个 Proxy 伺服器也是几个常见的伺服器里面,硬体要求相对比较高的一个咚咚!因为 Proxy 要求的是‘快速’,所以呢,呵呵!当然硬体等级的要求是相当的‘蛮像一回事’的!^_^
 
原理
  :什么是代理伺服器
  :代理伺服器的运作方式
  :代理伺服器的用途与优缺点
  :什么是上层代理伺服器?哪里有上层代理伺服器
  :我是否一定要设定 Proxy
  :所需要的硬体要求与最佳硬体配置方式
  :代理伺服器与 NAT 主机的差异
套件安装
  :使用 RPM 方式安装 squid
  :使用 Tarball 方式安装 squid
Server 端设定
  :squid 的结构
  :squid 的 process owner 与 cache directory owner
  :最简易的 squid 设定方法
  :记忆体与磁碟快取留存百分比设定
  :acl 的用法与用途
  :上层 Proxy 的选择与负载分流的设定方法
  :与时间相关的设定值 ( connect_timeout, request_timeout )
  :总是系统自己来捉资料(always_direct)
  :限制使用 proxy 使用者与 proxy 目标的方式 (acl and http_access )
  :额外的功能参数
Client 端设定
  :Netscape
  :Internet Explorer
Server 端进阶设定
  :末端资料分析 pwebstat
  :末端资料分析 sarg
  :防火墙的规划
  :NAT 与 Proxy 透过 transparent proxy 设定加快网路传输
  :squid 的注意事项
重点回顾
参考资源
本章习题练习

原理:
    代理伺服器的原理其实很简单啦!就是以类似代理人的角度去取得使用者所需要的资料就是了!但是由于他的功用,使得我们可以透过代理伺服器来额外的达成防火墙的功能!此外,也可以藉由代理伺服器 ( 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://linux.vbird.org/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://linux.vbird.org 这个网站的‘任何资料’,因为‘ .* ’代表任意字元的意思啊!如果仅只是一些档名,例如 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://linux.vbird.org/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://linux.vbird.org/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://linux.vbird.org/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 伺服器可以提升网域之内的网路安全性?

  • 前往参考用解答
简易 Proxy Server 架设

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
 
     
本网页主要以 firefox 配合解析度 1024x768 作为设计依据
http://linux.vbird.org is designed by VBird during 2001-2009. Aerosol Lab.