Chinaunix首页 | 论坛 | 博客
  • 博客访问: 898139
  • 博文数量: 282
  • 博客积分: 10843
  • 博客等级: 上将
  • 技术积分: 2435
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-01 15:23
文章分类

全部博文(282)

文章存档

2013年(1)

2012年(18)

2011年(14)

2010年(30)

2009年(48)

2008年(55)

2007年(55)

2006年(61)

分类: 系统运维

2007-04-18 17:14:04

昨天有学生问关于squid的问题,自己也不太明白,网上找了两篇资料,还没来得及看,转过来先,呵呵!

squid基础与配置

一、Squid入门

  1.Squid是什么?

  Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。

  2.Internet缓冲的一些概念

  你可能会想到一些问题:缓冲有多大的用处?什么时候目标(object)应该或者不应该被缓冲?例如,缓冲信用卡号码是完全不适合的,脚本文件的执行结果在远程服务器端,站点经常更新(象)或者甚至站点不允许缓冲,这些情况也都是不适合缓冲的。

  Squid处理各种情况是不错的(当然,这需要远程站点按标准形式工作)。

  可执行的cgi-bin脚本文件不被缓冲,返回正确页眉的页面是在一段限制了的时间内被缓冲,而且你可以规定特殊的规则以确定什么是可以或不可以被缓冲的,还有缓冲的时间为多长。

  谈到缓冲的用处有多大,这要看Internet的容量大小,各有不同。对于小型的缓冲区(几转磁盘空间)来说,返回值非常高(达到25%)。这个空间缓冲经常访问的站点,如netscape,cnn和其它一些类似情况的站点。如果你增加一倍缓冲的磁盘空间,但你不会成倍增加你的命中率。这是因为你开始缓冲网络中剩余部分时,这些通常时很大的而且很少被访问。一个非常大的高速缓冲区,有20转左右,可能返回值仍小于50%,除非你对保存数据的时间长短经常改变(一般地你不要分配20转的磁盘空间,因为页面很快就会过时,应该被删除掉)。

  我们在这里说的目标(object)指的是可保存的web页面或其它类似的可下载页面(ftp文件或目录内容也称为目标(object))。

  3.Squid运行在什么系统上?

  Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:

  AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris

二、编译安装Squid

  1.Squid的未编译版本

  我不能保证你能发现所有的Squid的未编译版本。在ftp:squid.nlanr.net上你可以找到一些未编译的版本,尽管它们可能不是最新的版本。

  Squid一般很容易编译,这是因为它本身可以自动配置。唯一真正的问题是是否在你的机器上有一个编译器。这可能发生在:你购买了商业OS但是它未包括标准的开发选项。你可能考虑在这种情况下装一个GNU的编译器,如果你在/usr/include下有必需的文件的话。你另外一个选择可能是请求别人的帮助。你也许需要查看“tracker database”以找到在你附近运行Squid的某人。假定他们有适合的硬件,他们很可能会帮助你的。

  1. 开始编译之前

  运行Squid的最好方法(在我看来)是创建一个特定的用户和组来运行它。我用相同的名字创建了一个Squid用户和一个Squid组,并设置用户的home目录为/usr/local/squid。然后我用su 转到Squid用户,这样文件就都由Squid以及Squid组所有(Squid用户主组必须为Squid)。随后我下载Squid源文件到/usr/local/squid/src并解包。

  这可能不是最好的安装Squid到你的系统上的方法,但是,如果多个用户将使用squid,你可以把他们都放在Squid组中。(当然,如果你不理解我所说的,尽可以用你自己的名义去安装,不要以root方式,否则,你将给你的机器带来安全上的危险。)

  2. 获得源码

  Squid的源始站点是squid.nlanr.net。这里还有许多其它的镜像站点,你可以考虑从你本地的镜像站点获得它,或者在archie服务器上搜索。一旦你已经下载了(一般放在/usr/local/squid/src/下),你可以用以下命令解压:
gzip -cd squid-tar.gz-fil | tar xv 或者 tar zxvf squid-tar.gz-fil
这将创建类似于以下行的目录:/usr/local/squid/src/squid-1.1.13/(依版本而定)。

  3. 编译Squid

  以下是编译Squid的一般指令。你可能还要做其它的事以编译Squid到你的系统上。通常你可以运行一个配置脚本文件,它指明了你的系统设置和你机器上的标题文件。这样,在解压和解包文件后。cd 到/usr/local/squid/src/squid-version/下并输入:
./configure

  这里假定你准备安装Squid到/usr/local/squid下。你也可以用下面的方法修改你的安装目录:
./configure -prefix=/some/other/directory

  然后你可能要敲入:make 以及 如果编译一切正常时,输入make install。这将生成在后面将要描述的目录并安装文件到目录下。


三、Squid的基本配置

  1. 目录结构

   Squid通常创建几个目录。它们一般如下:
/usr/local/squid
/bin
/cache
/etc
/logs/
/src (这是我们早些时候创建的)
/bin包括Squid本身的程序,以及其它程序如ftpget,它可以被Squid用来执行各种功能。
/cache/目录是实际缓冲数据的存放区。你可能要考虑把剩余缓冲放到不同分区去,或甚至是不同的磁盘。它包含的目录如以下行的形式:/00/ /01/ /02/ 和/03/ 这些又包括更多的子目录,最终是缓冲的实际数据。存储数据在多个目录下意味着从大的缓冲区取数据仍然很快,因为你的操作系统要读一个包含10000个文件的目录会需要很长的时间。
/etc/包含squid.conf文件,它是唯一的Squid配置文件。
/logs/目录可能会很大,特别是如果你包含同属时,它们会查询你每一次连接,这可以使你的log文件双倍增加。注意在cache目录下也有一个/log/文件,但是你不能删除或移动它。它是上面讨论的/usr/local/squid/cache/目录的一个索引。(这与IE的cache有些相似。)
/src/一般包括你运行Squid版本的源文件。

  2. 基本配置

  所有的Squid配置集中到一个文件----squid.conf。下面将详细讨论仅作为一个缓冲代理服务器的Squid的配置,而不是把它作为一个http加速器。

  以下是一个最基本的配置文件:
#squid.conf - a very basic config file for squid

#Turn logging to it's lowest level
debug_options ALL,1

#defines a group (or Access Control List) that includes all IP
#addresses
acl all src 0.0.0.0/0.0.0.0

#allow all sites to use connect to us via HTTP
http_access allow all

#allow all sites to use us as a sibling
icp_access allow all

#test the following sites to check that we are connected
dns_testnames internic.net usc.edu cs.colorado.edu mit.edu yale.edu

#run as the squid user
cache_effective_user squid squid
#otherwise, you can uncomment the below line and comment the one out.
# this will run as use "nobody" with the group "nogrtoup"
cache_effective_user nobody nogroup

  这个配置允许所有的人访问缓冲区,并创建一个100M的缓冲区,使用8M的内存,保持最小型的logs,而且存储所有文件到默认区域,这一般指的是所有文件将以Squid用户,Squid组的名义存储到“/usr/local/squid/cache”中。所有客户请求将来自于3128端口,并且所有“内部缓冲(inter-cache)”流量将走UDP端口3130。注意这个配置文件允许所有人访问你的缓冲机器,这可能不是你所希望的,但是至少它可以正常工作。

  3. 运行Squid

  Squid由一个脚本正常运行,这个脚本在它的进程死掉后重启Squid。这里有脚本的两种版本:/usr/local/squid/bin/RunCache 和 /usr/local/squid/bin/RunAccel 。
RunCache脚本一般在前台运行,所以启动Squid,输入以下内容:
% /usr/local/squid/bin/RunCache& %
然后用以下命令查看主Squid log文件/usr/local/squid/logs/cache.log
% more /usr/local/squid/logs/cache.log

  你将看到Squid启动的相关信息,如下行所示:
97/02/24 19:34:52| Starting Squid Cache version 1.1.10 for i586-pc-linux-gnu...
97/02/24 19:34:52| With 256 file descriptors available
97/02/24 19:34:52| Initializing IP Cache...
如果你没有看见任何关于FATAL错误的信息,Squid现在就可以很高兴地在你的机器上运行了。

  下面将配置你的浏览器,你可以好好地试一下哦!

  4. 客户端软件的基本配置

   以下是针对浏览器的基本配置:

   Netscape(4.5以上版本):
从Edit菜单项中选择Preferences项。在Advanced中Proxies页,点击按钮进入Proxy配置手册,然后再点击View按钮。对每项你的Squid服务器支持的协议项(默认有HTTP,FTP和gopher等)中填入Squid服务器的主机名或IP地址,同时在Port栏中填入Squid服务器的HTTP端口号(默认为3128)。对你的Squid不支持的协议,可以让这些栏空着。

  IE(5.0以上中文版本):
在工具菜单项中选择Internet选项,然后点击连接页,再按局域网设置按钮选择使用代理服务器选项,进入高级项目编辑。然后可以看到与Netscape代理服务器设置类似的界面,按照前面所述的方法分别填入相应项即可。

  一般Unix下配置:

  如果你使用可以允许你访问web的Unix程序(包括wget,lynx和mosaic等),你可以设置shell变量,通过这些变量可以配置好代理。

  如果你使用的shell是tcsh或csh,命令如下:
% setenv http_proxy
% setenv gopher_proxy
% setenv ftp_proxy

  现在你就可以使用你的浏览器与缓冲连接以下载页面了。为了检查通过缓冲是否工作正常,可以查看/usr/local/squid/logs/access.log文件的内容,使用命令如下:more /usr/local/squid/logs/access.log。你可以看到所有你进行的访问信息都显示在该文件中。

squid 配置详解

在此,我们要配置一个只对内部网络提供代理服务的 Proxy Server。它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法,普通用户则需要输入用户名和口令才能正常使用。高级用户没有访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制。

  安装

  可以从Squid站点
Hat提供的RPM包。

  RPM方式安装很简单,命令如下:

  $ rpm -ivh Squid-2.x.STALBx.i386.rpm


  不过笔者认为,即便是系统中已经默认安装了Squid,也应当先删掉然后安装最新的源代码包。因为开源软件会不断修正问题、提供更新的功能,使用最新版本可以保证最高的性能及安全,而且源代码方式可以完全定制系统。不过STABLE稳定版、DEVEL版通常是提供给开发人员测试程序的,假定下载了最新的稳定版squid-2.5.STABLE2.tar.gz,用以下命令解开压缩包:

$ tar xvfz squid-2.5.STABLE.tar.gz


  用bz2方式压缩的包可能体积更小,相应的命令是:

$ tar xvfj squid-2.5.STABLE.tar.bz2


  然后,进入相应目录对源代码进行配置和编译,命令如下:

$ cd squid-2.5.STABLE2


  配置命令configure有很多选项,如果不清楚可先用“-help”查看。通常情况下,用到的选项有以下几个:

--prefix=/web/squid
#指定Squid的安装位置,如果只指定这一选项,那么该目录下会有bin、sbin、man、conf等目录,而主要的配置文件此时在conf子目录中。为便于管理,最好用参数--sysconfdir=/etc把这个文件位置配置为/etc。
--enable-storeio=ufs,null
#使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服
务器,就需要加上null文件系统。
--enable-arp-acl
#这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"
#上面两个选项告诉Squid编入并使用简体中文错误信息。
--enable-linux-netfilter
#允许使用Linux的透明代理功能。
--enable-underscore
#允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是
非法的,并拒绝访问该地址。


  整个配置编译过程如下:

./configure --prefix=/var/squid
--sysconfdir=/etc
--enable-arp-acl
--enable-linux-netfilter
--enable-pthreads
--enable-err-language="Simplify_Chinese"
--enable-storeio=ufs,null
--enable-default-err-language="Simplify_Chinese"
--enable-auth="basic"
--enable-baisc-auth-helpers="NCSA"
--enable-underscore


  其中一些选项有特殊作用,将在下面介绍它们。

  最后执行make和make install两条命令,将源代码编译为可执行文件,并拷贝到指定位置。

  基本配置

  安装完成后,接下来要对Squid的运行进行配置(不是前面安装时的配置)。所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。

  在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为192.168.0.1,外部网络接口eth1的IP地址为202.103.x.x。下面是一个基本的代理所需要配置选项:

  http_port 192.168.0.1:3128


  默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。

  下面的配置选项是服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系:

cache_mgr



  以下这些参数告诉Squid缓存的文件系统、位置和缓存策略:

cache_dir ufs /var/squid
cache_mem 32MB
cache_swap_low 90
cache_swap_high 95


  在这里,Squid会将/var/squid目录作为保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。如果不想Squid缓存任何文件,如某些存储空间有限的专有系统,可以使用null 文件系统(这样不需要那些缓存策略):

cache_dir null /tmp


  下面的几个关于缓存的策略配置中,较主要的是第一行,即用户的访问记录,可以通过分析它来了解所有用户访问的详尽地址:

cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log


  下面这行配置是在较新版本中出现的参数,告诉Squid在错误页面中显示的服务器名称:

visible_hostname No1.proxy
阅读(1140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~