设定代理服务器(Proxy Server)

来源:岁月联盟 编辑:zhuzhu 时间:2007-02-11
设定代理服务器(Proxy Server)内容简介: 設定代理服务器(Proxy Server)


-------------------------------------------------------------------------------------------------

1. 什么是代理服务器

2. 代理服务器的优缺点

3. 哪里有代理服务器

4. 下载安装 squid

5. 设定代理服务器

6. Windows 内的设定

7. squid 的注意事项(增进 proxy 效能的方法)

-------------------------------------------------------------------------------------------------


什么是代理服务器


  从字面上的意义来看,代理服务器(proxy)就是帮客户端(就是你啦)去向目的地的机器要求用户需求的主机,因为他是你的代理人嘛!所以,当你设定代理服务器之后,你的所有相关的要求均会经过代理服务器去搜寻!例如,当你设定你在 windows 的 IE 下的代理服务器是 seednet 在南部的代理服务器(ksproxy.seed.net.tw、port: 8080),则当你要去奇摩的网站时,奇摩的网页资料将会先经过 ksproxy.seed.net.tw 这一部主机的存取之后,再传送到你的 windows 中!有点像下面这个流程:

  你的 Windows ---> ksproxy.seed.net.tw ---> www.kimo.com.tw

  你的 Windows <--- ksproxy.seed.net.tw <-----------」

  这里请注意,通常 proxy 都会将客户端要求的资料作一个备份在硬盘中!所以,当你要求过一次 www.kimo.com.tw 的资料后,这份网页资料就会暂存在 ksproxy.seed.net.tw 这架 proxy 中,而暂存的时间长短是依主机的设定而定的!

多层次的代理服务器

  好了,那如果你设定了一个代理服务器在你的 Linux 中,但是这个代理服务器的设定中,又会设定你的代理服务器的上层代理服务器??此话何解?也就是说,当你的代理服务器被要求去作某些工作的时候,他将会再透过向其它地方的代理服务器要求,来达到你的需求,例如你的代理服务器的上层代理服务器是 ksproxy 这一部,则客户端对你的 Linux 代理服务器的要求就会变成这样:

  你的 Windows --> 你的 proxy --> ksproxy.seed.net.tw ---> www.kimo.com.tw

  你的 Windows <-- 你的 proxy <-- ksproxy.seed.net.tw <-----------」

  也就是说,从客户端对你的要求到 www.kimo.com.tw 的东西,必须经过两个 proxy 主机的存取之后,才能到你的 windows 当中!

  更详细的说明你可以看一下这里。

返回页首
-------------------------------------------------------------------------------------------------

代理服务器的优缺点

  那代理服务器有何优点呢?当然啰,没有优点干嘛架设代理服务器?呵呵!底下说说他的优点吧:

· 快速的存取动作:他最大的优点就是可以提供客户端较为快速的浏览或者是资料的存取!咦!由刚刚的说明来看,你直接向 www.kimo.com.tw 的要求需要经过一个主机的存取动作,甚至是多个主机的存取,那理应更慢才对,为何会造成较快的情况呢?如果你仔细的看一下上面的流程,你会发现,当第一个人要求过 www.kimo.com.tw 的资料后, ksproxy.seed.net.tw 就已经保存有这份资料了,所以以后向这部 proxy 要求相同资料的客户端,将会直接取用这份资料,而不用到 www.kimo.com.tw 去了!故,通常我们设定代理服务器的时候,一定要找距离我们的机器最近的那一部,否则就没有达到代理服务器的功用了!通常快速的存取动作最明显的大概是连去国外的网站了!这里要强烈的建议,如果你需要连上国外的网页,请一定使用代理服务器,因为不但可以节省频宽,并且速度上会快上很多很多(例如美国 EPA 网站!!)。

· 降低网络的负荷:由于我们是项代理服务器要求资料,如果代理服务器内刚好有你要的资料,将会直接传给你,则你的要求将不会到真实的那一个网页去(除非你在 IE 内按下『重新整理』这个按钮),而如果没有你要求的资料,那他也会去捉一份你要的资料给你,并存下来,以后如果有与你相同需要的用户,那他就可以直接传送给用户,如此当可降低网络的负荷!另外,有些企业部门会将不同目标的代理服务器分开来,达到分流的目的!例如:proxy1主要为找寻台湾的网站,proxy2 为找国外的网站,则你的网域终将可以达到很好的分流效果,网络会比较快速喔!

· 提供防火墙内部的计算机连上 Internet:这个是一般企业比较常用的情况!由于企业内部害怕被骇客侵入,通常会设立一些比较严密的防火墙,然而如此一来公司内部的计算机可能面临无法连上 Internet 的窘境,那使用 proxy 让你的内部计算机可以透过这一架主机的代理服务而取得 Internet 上的信息,就是一个很好的方法啦!

· 多层次的管道:代理服务器可以提供多重的管道设定,例如,当你需要国内的资料时,代理服务器将直接去捉取,而需要国外的资料时,才连到上一层的代理服务器!如此将可达到你的需求(而不用常常在你的 IE 等浏览器上更改所需的代理服务器)

  但是有利就有弊,代理服务器有何缺点呢?由于代理服务器的设定中,通常会设定其上层代理服务器,如果你没有设定好,则如果你要读取近端的网页资料,可能会造成绕了一圈才又回到你的服务器的情况!因此设定上需要比较小心。

返回页首
-------------------------------------------------------------------------------------------------

哪里有上层代理服务器


  如果你需要设定代理服务器的话,底下有一些在网络上公开的代理服务器可供参考喔!

· SeedNet 的代理服务器

· Hinet 的代理服务器

· 一些台湾学术网络的代理服务器

  同时这里要补充的是,在一些私人单位的 Proxy (如 SeedNet 与 Hinet)设定中,他们仅提供给使用自家 ISP 的用户,因此不同的 ISP 之 Proxy 设定是会不同的!

-----------------------------------------------------------------------------------------------

下载安装 squid

  安装各种套件的方法主要可以分成 rpm 升级以及用来源档(binary档案)升级,以 rpm 方法升级是比较简单的方法,而且以 rpm -q 的指令可以来查询目前你的系统中的套件版本!不过由于 rpm 出来的时间会比较慢,并且不同 Linux 版本之间可能会有版本兼容性的问题,所以你也可以直接以 binary 升级(就是使用 *.tar.gz 的档案升级的方法)。要注意的是,你只要以其中一种方法升级就好了,不用重复升级喔!

下载:

  目前使用最多的代理服务器程序,大概是 squid 这一套程序了!在 Redhat 6.1 中就已经有这套软件,只是版本比较旧(2.2.stable-4),通常我会喜欢把这一套软件升级后才予以设定!升级的方式有两种,一个是使用 rpm 升级,另一个则是直接使用 source code 升级,以下提供的是 squid-2.4.STABLE1-5.src.rpm 的升级方式。不过,由于 squid 在安装的时候需要其它的附属套件的安装,所以还需要一些套件,这里提供了使用 rpm 升级的所有需要的套件,你可以下载回去用用看!另外,如果你需要使用到原始码来安装的话,这个网站你也可以去看看!

rpm 安装方法:

  我是以 RPM 程序来安装的,安装的附属套件要先安装才行,过程如下:



  请注意,由于有些套件有点小错误,所以需要强制安装,因此有些安装过程需要加上 --nodeps 这个参数才能安装!!至于 --rebuild 是重新编译的意思,若对于 rpm 不明了,请在往前看看以 rpm 升级的办法一文吧!

  基本上,经过上面的安装之后,应该就可以把 squid 升级了,你可以察看一下:



  这样就安装好啰!

  来源档升级:(update 2001/11/09)

  那如果你想要以最新版的 squid 来升级的话呢,要如何是好?这里提供了目前(2001/09/xx)最新的 squid 版本 squid-2.4.STABLE2-src.tar.gz ,新版的功能是比较多的。

  安装的方法很简单,只是你要先将 RedHat 6.1 原先的 squid 移除,然后将刚刚捉下去的档案。整个安装的方法,简单的来说,有下列几个步骤:



返回页首
------------------------------------------------------------------------------------------------

设定代理服务器

  这里仅提供简单的代理服务器的设定,如果你需要更详细的设定的话,请到 squid 的网页去看看吧!
需要给予设定的档案:

· 基本上,需要给予设定的档案只有一个,即是 squid.conf 这个档案。要注意的是,如果你是以 rpm 安装的,则这个档案会放在 /etc/squid/ 中,如果你是以 binary 安装的,那这个档案就会放在 /usr/local/squid/conf 当中!

· 另外,程序预设的激活批次档, rpm 的是 /etc/rc.d/init.d/squid 这个档案,而 binary 则在 /usr/local/squid/bin/squid 这个档案;

· 而程序预设的暂存目录在 /var/spool/squid !

  以下我将以 rpm 的档案进行说明,当然啰, binary 的修改是一样的,只是档案放置的地点不一样罢了!
确定 squid 可以正常执行:

  我们先简单修改一下 /etc/squid/squid.conf 这个档案,让他可以被激活,然后再继续往下修改!

· 找到下面几行,将批注(#)拿掉:



· 找到下面这行,并改成下列情况:
http_access deny all ==> http_access allow all

· 上面那一行改好之后,储存并离开 vi ,然后执行:
/etc/rc.d/init.d/squid start
或者是
/usr/local/squid/bin/squid

  如此则 squid 应该可以正常执行了!接下来请到 IE 中,如果你是 IE 5.0 以后的版本,请到:

『工具』->

『Internet 选项』->

『联机』->

『局域网络设定』中,点选

『使用 Proxy 服务器』

  并在网址列输入你的主机名称(或者是 IP 均可),然后按确定离开!然后在 IE 中按按看网页的设定有没有成功,如果可以读到网页的话,表示 squid 可以正常的被使用了!

  虽然 squid 可以被使用,但是要让你的 squid 实际发挥应有的能力时,你应该最少要设定一些基础的参数的!所以请继续往下看吧!

进阶的 squid.conf 设定:

  在完成了上述的设定之后,你的 Proxy Server 就可以激活了,不过,如果你想要再进一步进行设定的话,例如刚刚提过的,你想要让 squid 的上层代理伺服器具有选择性,以及想让 squid 的暂存空间更大,那你就必须要再设定了,以下提供几个不错的网页提供给你做为参考!

· 优克笔记本

· 台北市教育网络中心

  基本上,需要注意的地方主要可以分为底下几个:

· http_port 3128:

  这个东西是用来设定你的 Proxy 监听讯息的 port ,目前 proxy 通用的 port 是 3128 ,但是你也可以自行设定一个大于 1024 的 port ,例如另一个常用的 port 是 8080 这一个。不过我并不建议你修改这个 port ,因为如果你修改了之后,很有可能会造成无法联机的情况,所以还是使用默认值 3128 吧!

· cache_peer:(相当重要的!)


  这个就是用来设定上层代理服务器的指令,刚刚有提过『代理服务器可以设定多个』,而且你可以将代理服务器分类,以我为例,因为我住台南,所以成大计中对我而言是一个很不错的服务器,则我如果要向上层代理服务器要求讯息,可以指向成大计中(快很多喔!),亦即是 proxy.ncku.edu.tw 3128 这一个,请你依照你的所在地来设定你的代理服务器吧。

o cache_peer proxy.ncku.edu.tw parent 3128 3130

  上面的说明是,使用 proxy.ncku.edu.tw 这个主机当作 主要的(parent,就是父母的意思)上层代理服务器,另外,如果你想要向对等的服务器要求东西,就可以将 parent 写成 slbling 啰!除此之外,这一个指令可以重复写入,也就是说,你可以同时设定多个上层代理服务器!不过这里要向大家报告一下,如果设太多上层服务器的话,由于资料会一层层的去要求,所以速度反而会变慢!基本上是建议大家只要设定两个到三个左右的上层代理服务器就好了。

  再者,3128是 squid 主要的 port ,而 3130 则是另外一个监听的 port ,也要写上去喔!

· cache_peer_domain:(相当重要的!)

  这个参数可以用来分别指定不同网域的代理服务器,以我为例,因为常上美国 EPA 的网站,而 proxy.ncku.edu.tw 对于这个网站的读取能力很强,另外,gate.ncku.edu.tw 这个 proxy 则对 ucar.edu 这个美国网域的读取能力较强,那我可以使这两个网域向不同的 proxy 索取资料:

o cache_peer_domain proxy.ncku.edu.tw .epa.gov

o cache_peer_domain gate.ncku.edu.tw .ucar.edu

  那你晓得了吗?只要你在这里分别指定不同的代理服务器,那你自己的这个代理服务器就自动的帮你完成你需要的资料来源了!很重要吧!

· cache_mem 8 MB:

  这东西与你的内存有关,如果你的内存够大的话,这个 8 可以变大一些,例如你的内存有 256 MB 时,你可以设成 256*1/4 ==> 64 MB,如果你只有 64MB,而且主机还有其它用途,那使用预设的 8 MB 就好了。

· cache_dir ufs /var/spool/squid 100 16 256:(update 2001/11/09)

  这个指令就是限制暂存区大小的地方啦,上面的说明是:暂存区目录为 /var/spool/squid ,而暂存空间大小为 100M , 在这个暂存目录下有 16 个目录,而每个目录中又有 256 个目录(你可以实际进入 /var/spool/squid 当中去看看)。如果你要改变暂存盘目录及这个目录的大小时,可以在这里修改!不建议修改 16, 256 这两个数值。另外,通常,如果是我们一般小型的区网(不超过10个人),那设定个 500 应该够了,如果你的硬盘够大,设定成 1000 以上更好。修改过这个指令后,要再重新激活 squid 之前,请先使用下面的指令来使你的目录可以进行存取的动作,否则你的 squid 是不会工作的!例如你将上面的参数修改成:
cache_dir ufs /var/spool/squid 1000 16 256

然后再进行下面的指令:

rm -rf /var/spool/squid

mkdir /var/spool/squid

chown squid:squid /var/spool/squid

/usr/sbin/squid -z

  这样你的squid暂存目录就可以使用啰!

  另外,如果你刚刚在安装的时候有将 --enable-async-io=40 这一个加进来的话,将可以增加 aufs 这一个磁盘的用途!这个东西可真是好呀!可以将你的硬盘发挥到最极限的速度喔!虽然在 squid.conf 档案中有提及,这个 type 可能会有 bug 存在,不过,据鸟哥的使用结果,发现,没啥大问题!好用的很!所以,你可以将上面的咚咚改成下面的样子:

cache_dir aufs /var/spool/squid 1000 16 256

· acl 与 http_access:

  这两个档案是相互辉映的,例如:如果你只要将这个 Proxy 开放给内部网络 192.168.1.XXX 用的话,你可以增加这三行:

o acl insidenet src 192.168.1.0/255.255.255.0 (insidenet 只是一个代号,你可以任意设定,但须与底下的相同名称。而 src 代表后面接的是 IP 的意思,而后面的 IP(255.255.255.0) 表示 192.168.1.0~192.168.1.255 均为此设定中!)

o http_access deny all(关于 proxy 全部的服务均取消)

o http_access allow insidenet localhost(仅开放 Proxy 给 insidenet 及 localhost 两个网域使用)

· cache_mgr root:

  当 squid 有问题的时候,要联络谁?通常我都将 root 改成我自己的 ID ,如此才能在其它的机器上收到信!

o cache_mgr vbird@tsai.adsldns.org

· acl 与 always_direct:(很重要)


  这个就是是否需要直接去读取你要的网页,而不要透过上层代理服务器的指令(重要)。例如:我们不需要在台湾地区的学术网络还透过上层代理服务器的话,可以写入这两行:

o acl Taiwan-net dstdomain .edu.tw(就是设定网址,其中 dstdomain 后面接的就是网址,网址的型态亦可仅写成 .tw 即可)

o always_direct allow Taiwan-net(这个网址的网页,直接由我们这个 Proxy 去捉,而不透过上层 Proxy)

· acl 与 never_direct:

  这个就是不要直接去取得资料的设定处,例如我们常去的美国环保署网站,我们希望关于这个网页的资料一定由上层 Proxy 去捉取,则可以这样设定:

o acl usepa dstdomain .epa.gov

o never_direct allow usepa

  上面这个 always_direct 与 never_direct 的设定可以是多重的,你可以多写入几个对应的网址,去定义你的上层 Proxy 的工作路径!

· prefer_direct off:

  上面这个选项一定要设定为 off ,不然的话你的 squid 将会尝试直接到网站去捉资料,而不会透过上层 proxy 喔!

· 重新激活:

  设定完成之后,最重要的就是重新激活了,你可以这样来激活:

o /etc/rc.d/init.d/squid restart

o /usr/local/squid/bin/squid -k reconfigure

· 特别需要注意的地方:基本上这样的 squid 设定应该能满足你的需求了,如果你的上层代理服务器设定妥当的话,那你应该会感受到代理服务器带给你的网络联机速度上的快乐喔!不过有些地方还是需要注意一下的:

1. 目前作为代理服务器的主机,大都由于频宽的问题,所以会限制联机上来的使用者,就是上面的 http_access 这个参数的设定值,因此,你应该针对你所在的网域去调查你的上层代理服务器,若可能的话,可以提出申请,请管理员帮你开启使用,否则对 squid 是不会有帮助的!

2. 在 acl 后面接了代号及 dstdomain 之后,如果你要接一个网域的话,请在前面加 . 例如美国环保署的网站(不论是 www 或其它)就要写成 .epa.gov 而不是 epa.gov(先前我搞错了!向大家对不起!),这样一来,不论 www.epa.gov 或 adb.epa.gov 才会经过你的上层 proxy 喔!

3. 请依照你实际的需求来设定 acl 与 never_direct 与 always_direct ,例如你人在台湾,那几乎所有 com.tw 的网站都不用透过 proxy 也可以捉得很好!反而透过 proxy 会变慢哩,同样的,如果是学术网络的话,就直接把 .edu.tw 加入到 always_direct 当中吧!

4. 也需要注意一下 cache_peer_domain 用来分流的方法喔!

这里有几个设定的范例可以参考一下:

· 成大 gate.ncku.edu.tw 的 squid.conf 设定

· 电机系 turtle.ee.ncku.edu.tw 的 squid.conf 设定

· 台南学校范例 proxy.school.tn.edu.tw 的 squid.conf 设定

返回页首
-------------------------------------------------------------------------------------------------

Windows 内的设定

  以下使用 IE 作为说明,如果是 Netcape 的话,基本上的设定是相同的:

· 开启 IE ,然后在『工具』内选择『Internet 选项』:



· 在开启的窗口内选择『联机』并点选下方的『局域网络设定』:



· 在新的框框中,填入你所需要的 Proxy 的网址或者是 IP 均可,而 port 则需视你的代理服务器而定,以我为例,我都是使用 192.168.1.2 作为我的主机(NAT、Proxy、Web 都是同一台机器),而 port 也仅是设定为通用的 3128 ,所以如下方设定即可,当然,如果你是在南部的 seednet 用户,或者可以填入 ksproxy.seed.net.tw,port 则填入 8080 即可。



· 另外,你也可以在 IE 中直接设定你要直接去捉取的网页名称,点选上个图的 『进阶』那一项,在出现的框框的最底下,可以填入你不想透过 Proxy 捉取的网站网址!



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

返回页首
-------------------------------------------------------------------------------------------------

squid 的注意事项

  使用代理服务器后,浏览国外的网页应该是可以变快的!但是,你要小心几件事:

1. 若 squid 内设定的使用空间满了,则 squid 将不会运作!

2. 若 squid 的纪录文件太大了,则工作效率会变慢!

  如上所述,由于 squid 可能会让你的硬盘空间饱和(尤其我们都是使用旧计算机,硬盘容量本来就不是很足够),如果每隔几个月就要去清理硬盘一次,那可能会造成人力的浪费,这个时候,使用例行性的工作就是个好方法啦!

· 删除记录文件的方法:


  基本上,记录文件不需要保存太久的时间,你可以在 /etc/cron.daily 这个目录中增加一个档案(档名随便取都可以),假设档名为 system_do.sh,则在这个档案中,你可以增加这一行:



· 这个方法在使你的纪录文件可以被转成备份文件!而且每天都更新备份,不过,你必须将 system_do.sh 这个档案更改成可执行档,例如: chmod 700 system_do.sh

  然后在你的 /etc/cron.weekly 目录中,也增加一个档案,里头也增加一行:



  同样的做成可执行档,如此,则每个礼拜系统可将你的备份文件杀掉啰!

· 删除记录目录的方法:


  同样的,你可以在每个月清理一次你的暂存目录,你可以将你的 /etc/cron.monthly 里面增加一个档案,增加下面这几行:



  则每个月系统会自动的将 squid 暂存于 /var/spool/squid 的资料全部杀掉,再重新建造一个新的目录,另外,将目录改变成 squid 所有(避免不能读写的情况!)之后,激活这个暂存目录的格式化(squid -z),最后再重新激活!如此则不需害怕暂存目录会被吃光光了!

· 增加 proxy 效能的方法:

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

2. 关于暂存目录的设定:以 cache_dir ufs 设定的目录,最好是单独割出来的约 1-2 GB 的硬盘槽,以我为例,我将另外一台主机的 30GB 的硬盘割两槽给 proxy 用,而每一槽只有 2GB ,分别命名为 proxy1 与 proxy2 ,则可以写成

cache_dir ufs /proxy1 2000 16 256

cache_dir ufs /proxy2 2000 16 256

  由于分成两槽来存取,所以整体效率上会比较好,但这是针对一般比较大型的代理服务器的设定了,我们这个小主机就不用如此设定(但是效率真的有差哩!)。

3. 善用 acl, always_direct, never_direct:就如同上面提到的,因为你的目的不同,所以会使用到不同的 proxy 作为你的上层代理服务器,如果你发现你的上层代理服务器无法针对你常上的网站来求取资料时,就将那个网站加入你的 always_direct 吧!另外,也可以使用 cache_peer_domain 来处理喔!

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

(来源:鸟哥私房菜)