📄 chinaunix_net - 我刚学习squid时的参考文档,感觉永远是经典之作。.htm
字号:
<BR>常见的浏览器如netscape、IE等可以直接使用Socks, 并且我们也可以使用socsk5的所带的client来使那些不直接支持socks的internet软件使用Socks。
<BR>更多的资料可以参考Socks官方站点http://www.socks.nec.com。
<BR><BR>2.3 Squid
<BR>对于web用户来说,Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
<BR>Squid将数据元缓存在内存中,同时也缓存DNS查询的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约带宽。
<BR>Squid由一个主要的服务程序squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
<BR><BR>2.4 选择
<BR>从上面的比较可以看出,Apache主要功能是web服务器,代理功能只不过是其一个模块而已,Socks虽然强大,但有欠灵活,因此我们着重推荐你使用Squid。下面的章节我们就一起来学习Squid激动人心的特性及相关的安装与配置。
<BR><BR>三、安装Squid Proxy Server <BR><BR>3.1获取软件
<BR>你可以通过以下途径获取该软件:
<BR>1.从Squid的官方站点http://www.squid-cache.org下载该软件;
<BR>2.从你的linux发行版本中获取该软件;
<BR>通常,Squid软件包有两种:一种是源代码,下载后需要自己重新编译;可执行文件,下载后只需解压就可以使用;另一种是就是RedHat所使用的rpm包。下面我们分别讲讲这两种软件包的安装方法。
<BR><BR>3.2安装软件 <BR>我们以目前最新的稳定版本squid-2.3.STABLEX为例。
<BR><BR>3.2.1rpm包的安装 <BR>1.进入/mnt/cdrom/RedHat/RPMS
<BR>2.执行rpm -ivh squid-2.2.STABLE4-8.i386.rpm。
<BR>当然,我们也可以在开始安装系统的过程中安装该软件。 <BR><BR>3.2.2 源代码包的安装
<BR>1.从http://www.squid-cache.org下载squid-2.3.STABLE2-src.tar.gz。
<BR>2.将该文件拷贝到/usr/local目录。
<BR>3.解开该文件 tar xvzf squid-2.3.STABLE2-src.tar.gz。
<BR>4.解开后,在/usr/local生成一个新的目录squid-2.3.STABLE2,为了方便用mv命令将 该目录重命名为squid mv squid-2.3.STABLE2 squid;
<BR>5.进入squid cd squid
<BR>6.执行./configure 可以用./confgure --prefix=/directory/you/want指定安装目录
<BR>系统缺省安装目录为/usr/local/squid。
<BR>7.执行 make all
<BR>8.执行 make install
<BR>9.安装结束后,squid的可执行文件在安装目录的bin子目录下,配置文件在etc子目录下。
<BR><BR>四、配置squid基础篇——让代理服务器跑起来
<BR>由于RedHat各方面的优势(包括易用性,稳定性等等),全世界范围内使用该发行版的用户比较多,所以,我们下面的说明都是以RedHat6.1环境下squid-2.2.STABLE4-8版本为主。从我的使用经验看来,该版本的squid要比其他版本稳定的多,以前的1.1.22版本也比较稳定,但是在功能及灵活性方面有所欠缺。
<BR>squid有一个主要的配置文件squid.conf,在RedHat环境下所有squid的配置文件位于/etc/squid子目录下。
<BR><BR>4.1常用的配置选项
<BR>因为缺省的配置文件有问题,所以我们必须首先修改该配置文件的有关内容,以便让squid跑起来。
<BR>下面我们来看一看squid.conf文件的结构以及一些常用的选项:
<BR>squid.conf配置文件的可以分为十三个部分,这十三个部分分别是:
<BR>1.NETWORK OPTIONS (有关的网络选项)
<BR>2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居选择算 法的有关选项)
<BR>3.OPTIONS WHICH AFFECT THE CACHE SIZE (定义cache大小的有关选项)
<BR>4.LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径及cache的目录)
<BR>5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)
<BR>6.OPTIONS FOR TUNING THE CACHE (调整cache的选项)
<BR>7.TIMEOUTS (超时)
<BR>8.ACCESS CONTROLS (访问控制)
<BR>9.ADMINISTRATIVE PARAMETERS (管理参数)
<BR>10.OPTIONS FOR THE CACHE REGISTRATION SERVICE (cache注册服务选项)
<BR>11.HTTPD-ACCELERATOR OPTIONS (HTTPD加速选项)
<BR>12.MISCELLANEOUS (杂项)
<BR>13.DELAY POOL PARAMETERS (延时池参数)
<BR>虽然squid的配置文件很庞大,但是如果你只是为一个中小型网络提供代理服务,并且只准备使用一台服务器,那么,你只需要修改配置文件中的几个选项。这些几个常用选项分别是:
<BR>1.http_port
<BR>说明:定义squid监听HTTP客户连接请求的端口。缺省是3128,如果使用HTTPD加速模式 则为80。你可以指定多个端口,但是所有指定的端口都必须在一条命令行上。
<BR>2.cache_mem (bytes)
<BR>说明:该选项用于指定squid可以使用的内存的理想值。这部分内存被用来存储以下对象 :
<BR>In-Transit objects (传入的对象)
<BR>Hot Objects (热对象,即用户常访问的对象)
<BR>Negative-Cached objects (消极存储的对象)
<BR>需要注意的是,这并没有指明squid所使用的内存一定不能超过该值,其实,该选项只 定义了squid所使用的内存的一个方面,squid还在其他方面使用内存。所以squid实际 使用的内存可能超过该值。缺省值为8MB。
<BR>3.cache_dir Directory-Name Mbytes Level-1 Level2
<BR>说明:指定squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布不同的磁盘分区。"directory "指明了该交换空间的顶级目录。如果你想用整个磁盘来作为交换空间,那么你可以将该目录作为装载点将整个磁盘mount上去。缺省值为/var/spool/squid。“Mbytes”定义了可用的空间总量。需要注意的是,squid进程必须拥有对该目录的读写权力。“Level-1”是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,“Level-2”是可以建立的第二级子目录的数目,缺省值为256。为什么要定义这么多子目录呢?这是因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这也会导致系统寻找某一个文件的时间大大增加,从而使系统的整体性能急剧降低。所以,为了减少每个目录下的文件数量,我们必须增加所使用的目录的数量。如果仅仅使用一级子目录则顶级目录下的子目录数目太大了,所以我们使用两级子目录结构。
<BR>那么,怎么来确定你的系统所需要的子目录数目呢?我们可以用下面的公式来估算。 <BR>已知量:
<BR>DS = 可用交换空间总量(单位KB)/ 交换空间数目
<BR>OS = 平均每个对象的大小= 20k
<BR>NO = 平均每个二级子目录所存储的对象数目 = 256
<BR>未知量: <BR>L1 = 一级子目录的数量
<BR>L2 = 二级子目录的数量 <BR>计算公式:
<BR>L1 x L2 = DS / OS / NO
<BR>注意这是个不定方程,可以有多个解。 <BR>4.acl <BR>说明:定义访问控制列表。
<BR>定义语法为:
<BR>acl aclname acltype string1 ...
<BR>acl aclname acltype "file" ...
<BR>当使用文件时,该文件的格式为每行包含一个条目。
<BR>acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user 中的一种。
<BR>分别说明如下: <BR>src 指明源地址。可以用以下的方法指定:
<BR>acl aclname src ip-address/netmask ... (客户ip地址)
<BR>acl aclname src addr1-addr2/netmask ... (地址范围)
<BR>dst 指明目标地址。语法为:
<BR>acl aclname dst ip-address/netmask ... (即客户请求的服务器的ip地址)
<BR>srcdomain 指明客户所属的域。语法为:
<BR>acl aclname srcdomain foo.com ... squid将根据客户ip反向查询DNS。
<BR>dstdomain 指明请求服务器所属的域。语法为:
<BR>acl aclname dstdomain foo.com ... 由客户请求的URL决定。
<BR>注意,如果用户使用服务器ip而非完整的域名时,squid将进行反向的DNS解析来确 定其完整域名,如果失败就记录为“none”。
<BR>time 指明访问时间。语法如下:
<BR>acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
<BR>day-abbrevs: <BR>S - Sunday
<BR>M - Monday <BR>T - Tuesday
<BR>W - Wednesday <BR>H - Thursday
<BR>F - Friday <BR>A - Saturday
<BR>h1:m1 必须小于 h2:m2,表达示为[hh:mm-hh:mm]。
<BR>port 指定访问端口。可以指定多个端口,比如:
<BR>acl aclname port 80 70 21 ...
<BR>acl aclname port 0-1024 ... (指定一个端口范围)
<BR>proto 指定使用协议。可以指定多个协议:
<BR>acl aclname proto HTTP FTP ...
<BR>method 指定请求方法。比如:
<BR>acl aclname method GET POST ...
<BR>5.http_access <BR>说明:根据访问控制列表允许或禁止某一类用户访问。
<BR>如果某个访问没有相符合的项目,则缺省为应用最后一条项目的“非”。比如最后一条为允许,则缺省就是禁止。所以,通常应该把最后的条目设为"deny all" 或 "allow all" 来避免安全性隐患。
<BR>4.2 应用实例
<BR>假想情景:某公司用squid作代理服务器,该代理服务器配置为PII450/256M/8.4G,公司所用ip段为1.2.3.0/24,并且想用8080作为代理端口。
<BR>则相应的squid配置选项为: <BR>1.http_port
<BR>http_port 8080 <BR>2.cache_mem
<BR>思路:由于该服务器只提供代理服务,所以该值可以尽量设得大一些。
<BR>cache_mem 194M
<BR>3.cache_dir Directory-Name Mbytes Level-1 Level2
<BR>思路:硬盘为8.4G的,在安装系统时应该做好规划,为不同的文件系统划分可用空间。在本例中,我们可以这样来划分:
<BR>/cache1 3.5G <BR>/cache2 3.5G
<BR>/var 400M <BR>swap 127M
<BR>/ 剩余部分
<BR>并且,在安装时,我们尽量不安装不必要的包。这样在节约空间的同时可以提高系统的安全性和稳定性。下面我们来计算所需的第一级和第二级子目录数。
<BR>已知量:
<BR>DS = 可用交换空间总量(单位KB)/ 交换空间数目=7G/2=3500000KB
<BR>OS = 平均每个对象的大小= 20k
<BR>NO = 平均每个二级子目录所存储的对象数目 = 256
<BR>未知量: <BR>L1 = 一级子目录的数量
<BR>L2 = 二级子目录的数量 <BR>计算公式:
<BR>L1 x L2 = DS / OS / NO=3500000/20/256=684
<BR>我们取 <BR>L1=16 <BR>L2=43
<BR>所以,我们的cache_dir语句为:
<BR>cache_dir /cache1 3500M 16 43
<BR>cache_dir /cache2 3500M 16 43
<BR>4.acl <BR>思路:通过src来定义acl.
<BR>acl allow_ip src 1.2.3.4/255.255.255.0
<BR>5.http_access
<BR>http_access allow allow_ip
<BR><BR>4.3启动、停止squid。
<BR>配置并保存好squid.conf后,可以用以下命令启动squid。 <BR>squid
<BR>或者,使用RedHat的启动脚本来启动squid.
<BR>/etc/rc.d/init.d/squid start
<BR>同样地,你也可以用下列脚本停止运行squid或重启动squid.
<BR>/etc/rc.d/init.d/squid stop
<BR>/etc/rc.d/init.d/squid restart
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -