下载
第8章 Linux代理服务器
8.1 代理服务器概述
8.1.1 什么是代理服务器
在T C P / I P网络中,传统的We b通信过程是这样的:客户端向服务器请求数据,服务器响应该
请求,将数据传送给客户端见图 8 - 1。
图8-1 传统的We b通信过程
在引入了代理服务器以后,这一过程变成了这样:客户端向服务器发起请求,该请求被送
到代理服务器;代理服务器分析该请求,先查看自己缓存中是否有请求数据,如果有,就直接
传送给客户端,如果没有,就代替客户端向该服务器发出请求。服务器响应以后,代理服务器
将响应的数据传送给客户端,同时在自己的缓存中保留一份该数据的拷贝 (如图8 - 2所示)。这样,
再有客户端请求相同的数据时,代理服务器就可以直接将数据传送给客户端,而不需要再向该
服务器发起请求。
图8-2 引入了代理服务器后的We b通信过程
8.1.2 代理服务器的功能
一般说来,代理服务器具有以下的功能:
客户端向服务器发出请求
服务器传送数据给客户端
客户端 Web服务器
客户端将请求送到代理服务器
Proxy将数据传给客户端
如果代理缓存中有请求的数
据,则直接传给客户端
Web服务器响应请求
Proxy向Web服务器发出请求
客户端 Web服务器代理服务器
1. 通过缓存增加访问速度
随着I n t e r n e t的迅猛发展,网络带宽变得越来越珍贵。为了提高访问速度,好多 I S P都提供代
理服务器,通过代理服务器的缓存功能来加快网络的访问速度。一般说来,大多数的代理服务
器都支持H T T P缓存,但是,有的代理服务器也支持 F T P缓存。在选择代理服务器时,对于大多
数的组织,只需要H T T P缓存功能就足够了。
通常,缓存有主动缓存,被动缓存之分。所谓被动缓存,指的是代理服务器只在客户端请
求数据时才将服务器返回的数据进行缓存,如果数据过期了,又有客户端请求相同数据时,代
理服务器又必须重新发起新的数据请求,在将响应数据传送给客户端时又进行新的缓存。所谓
主动缓存,就是代理服务器不断地检查缓存中的数据,一旦有数据过期,则代理服务器主动发
起新的数据请求来更新数据。这样,当有客户端请求该数据时,就会大大缩短响应时间。需要
说明的是,对于数据中的认证信息,大多数的代理服务器都不会进行缓存。
2. 提供用私有 I P访问I n t e r n e t的
I P地址是不可再生的宝贵资源,假如只有有限的 I P地址,但是需要提供整个组织的 I n t e r n e t
访问能力,那么,可以通过使用代理服务器来实现这一点。
3. 提高网络的安全性
这一点是很明显的,如果内部用户访问 I n t e r n e t都是通过代理服务器进行,那么,代理服务
器就成为进入 I n t e r n e t的唯一通道;反过来说,代理服务器也是 I n t e r n e t访问内部网的唯一通道,
如果你没有做反向代理,则对于 I n t e r n e t上的主机来说,你的整个内部网只有代理服务器是可见
的,从而大大增强了网络的安全性。
8.1.3 代理服务器的分类及特点
通常的代理服务器分类方法,是从实现的机理分为线路层代理、应用层代理、智能线路层
代理等等。在这里,从另外一个角度出发,把代理服务器分为传统代理服务器和透明代理服务
器。
有必要好好搞清楚两者的区别,只有真正明白了内在的机理,才能在遇到问题时,有章可
循,不会一头雾水,不知从何解决问题。因此,下面就通过具体的实例来说明。
我们的例子都基于以下假设 (见图8 - 3 ):
图8-3 代理服务器示意图
你的域名为 s a m p l e . c o m ,你的内部网 ( 1 9 2 . 1 6 8 . 1 . * )用户通过 p r o x y. s a m p l e . c o m (外部接口
e t h 0 : 1 . 2 . 3 . 4 ;内部接口 e t h 1 : 1 9 2 . 1 6 8 . 1 . 1 )的代理服务器访问 I n t e r n e t,换句话说,该代理服务器是
第8章 L i n u x代理服务器计计233
下载
内部网 DDN
Internet
Client
192.168.1.100
Proxy
eth0:1.2.3.4
eth1:192.168.1.1
唯一一台直接与 I n t e r n e t和内部网相连的机器。该代理服务器上运行着某种代理服务器软件(如
s q u i d )。并假设内部网中某一客户机为 c l i e n t . s a m p l e . c o m ( 1 9 2 . 1 6 8 . 1 . 1 0 0 )。
1. 传统代理
在以上基础上我们做以下工作:
1) 代理服务软件被绑定到代理服务器的 8 0 8 0端口。
2) 客户端浏览器被配置使用代理服务器的 8 0 8 0端口。
3) 客户端不需要配置D N S。
4) 代理服务器上需要配置代理服务器。
5) 客户端不需要配置默认路由。
当我们在客户端浏览器中打开一个 w e b请求,比如“h t t p : / / w w w. l i n u x a i d . c o m . c n”时,将陆
续发生以下事件:
1) 客户端使用某一端口(比如 1 0 2 5 )连接代理服务器8 0 8 0端口,请求w e b页面“h t t p : / / w w w.
l i n u x a i d . c o m . c n”。
2) 代理服务器向D N S请求“w w w. l i n u x a i d . c o m . c n”,得到相应的 I P地址2 0 2 . 9 9 . 11 . 1 2 0。然后,
代理服务器使用某一端口(比如 1 0 3 7 )向该I P地址的8 0端口发起w e b连接请求,请求w e b页面。
3) 收到响应的w e b页面后,代理服务器把该数据传送给客户端。
4) 客户端浏览器显示该页面。
从w w w. l i n u x a i d . c o m . c n的角度看来,连接是在1 . 2 . 3 . 4地1 0 3 7端口和2 0 2 . 9 9 . 11 . 1 2 0的8 0端口之
间建立的。从c l i e n t的角度看来,连接是在 1 9 2 . 1 6 8 . 1 . 1 0 0的1 0 2 5端口和1 . 2 . 3 . 4的8 0 8 0端口之间建
立的。
2. 透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在。
在以上基础上我们做以下工作:
1) 配置透明代理服务器软件运行在代理服务器的 8 0 8 0端口。
2) 配置代理服务器将所有对8 0端口的连接重定向到8 0 8 0端口。
3) 配置客户端浏览器直接连接到 I n t e r n e t。
4) 在客户端配置好D N S .
5) 配置客户端的默认网关为1 9 2 . 1 6 8 . 1 . 1 .
当我们在客户端浏览器中打开一个 w e b请求,比如“h t t p : / / w w w. l i n u x a i d . c o m . c n”时,将陆
续发生以下事件:
1) 客户端向D N S请求“w w w. l i n u x a i d . c o m . c n”,得到相应的 I P地址2 0 2 . 9 9 . 11 . 1 2 0。然后,客
户端使用某一端口(比如1 0 6 6 )向该I P地址的8 0端口发起w e b连接请求,请求w e b页面。
2) 当该请求包通过透明代理服务器时,被重定向到代理服务器的绑定端口 8 0 8 0。于是,透
明代理服务器用某一端口(比如 1 0 8 8 )向2 0 2 . 9 9 . 11 . 1 2 0的8 0端口发起w e b连接请求,请求 w e b页
面。
3) 收到响应的w e b页面后,代理服务器把该数据传送给客户端。
4) 客户端浏览器显示该页面。
234计计GNU/Linux高级网络应用服务指南
下载
从w w w. l i n u x a i d . c o m . c n的角度看来,连接是在1 . 2 . 3 . 4地1 0 8 8端口和2 0 2 . 9 9 . 11 . 1 2 0的8 0端口之
间建立的。从c l i e n t的角度看来,连接是在 1 9 2 . 1 6 8 . 1 . 1 0 0的1 0 6 6端口和2 0 2 . 9 9 . 11 . 1 2 0的8 0端口之
间建立的。
以上就是传统代理服务器和透明代理服务器的区别所在。
8.2 各种代理服务器的比较
l i n u x下的代理服务器软件很多,但是被广泛应用的只有 A p a c h e、s o c k s、s q u i d等几个实践证
明是高性能的代理软件。下面我们分别来比较一下这几个软件。
8.2.1 Apache
A p a c h e是世界上用的最广泛的H T T P服务器,之所以用的最广泛,是因为它强大的功能、高
效率、安全性和速度。从 1 . 1 . x版本开始,A p a c h e开始包含了一个代理模块。用 A p a c h e作代理服
务器的性能优势并不明显,不建议使用。
8.2.2 Socks
S o c k s是一种网络代理协议,该协议可以让客户机通过 S o c k s服务器获得对 I n t e r n e t的完全访
问能力。 S o c k s在服务器和客户端之间建立一个安全的代理数据通道,从客户的角度看来,
S o c k s是透明的;从服务器的角度看来, S o c k s就是客户端。客户端不需要具有对 I n t e r n e t的直接
访问能力 (也就是说,可以使用私有 I P地址),因为S o c k s服务器能够把来自于客户端的连接请求
重定向到 I n t e r n e t。此外,S o c k s服务器可以对用户连接请求进行认证,允许合法用户建立代理连
接。同理,S o c k s也能防止非授权的 I n t e r n e t用户访问内部网络。所以常常把 S o c k s当作防火墙来
使用。
常见的浏览器如n e t s c a p e、I E等可以直接使用 S o c k s,也可以使用s o c s k 5的所带的c l i e n t来使
那些不直接支持s o c k s的i n t e r n e t软件使用S o c k s。
更多的资料可以参考S o c k s官方站点h t t p : / / w w w. s o c k s . n e c . c o m。
8.2.3 TIS FWTK
TIS FWTK 是Trusted Information Systems(TIS)Firewall Tools Kit的简称,也称为F W T K。与
其说是代理服务器,还不如称之为防火墙,因为它是应用网关式防火墙软件包的典型代表。
F W T K是用来建立和维护内部网络防火墙的工具集。其代码是用 C语言编写的,可以运行在
类U N I X的许多平台上,如 l i n u x、SCO UNIX。F W T K包含了许多独立的组件,大部分的组件是
代理应用程序,其支持的协议主要有以下几种:
Telnet 、FTP、HTTP、X-windows
F W T K的突出优点是将很好的访问控制融入其
中。例如,用户可以许可(或拒绝)从某
网络或某个网络的一部分,甚至从某个地址上对被保护的网络进行访问。可以到 T I S的w e b站点
下载h t t p : / / w w w. t i s . c o m,但它有一些很麻烦的认证过程。
第8章 L i n u x代理服务器计计235
下载
236计计GNU/Linux高级网络应用服务指南
下载
8.2.4 delegate
d e l e g a t e是一个应用级网关,或者称之为代理服务器。 d e l e g a t e主要具有以下的特性:
具有灵活的访问控制功能。
通过缓存降低网络带宽的利用率。
通过重用和共享连接提高响应时间。
d e l e g a t e是完全免费的。
支持多种操作系统,如U n i x、Wi n d o w s 9 5 / 9 8 / N T / 2 K、O S / 2。
支持多种协议: H T T P、F T P、N N T P、P O P、I M A P、S M T P、Te l n e t、Wa i s、X、L D A P、
L P R、S o c k s、I C P、S S L。
下面是d e l e g a t e官方网站(w w w. d e l e g a t e . o rg)提供的一份关于H T T P代理服务器的市场份额
的统计。他们的调查方法是通过程序记录访问其网站上某一个页面的客户端使用代理服务器的
情况来进行统计的。虽然这种调查方法不太全面,但是所谓窥一斑而知全豹,从中我们也可以
看出什么样的代理服务器是被用户广泛使用的。
8.2.5 Squid
对于We b用户来说,S q u i d是一个高性能的代理缓存服务器, S q u i d支持F T D、g o p h e r(电子
版中可能有这行内容,但是被图片所遮住)和 H T T P协议。和一般的代理缓存软件不同, S q u i d
用一个单独的、非模块化的、 I / O驱动的进程来处理所有的客户端请求。
S q u i d将数据元缓存在内存中,同时也缓存 D N S查询的结果,除此之外,它还支持非模块化
的D N S查询,对失败的请求进行消极缓存。 S q u i d支持S S L,支持访问控制。由于使用了 I C P(轻
量I n t e r n e t缓存协议),S q u i d能够实现层叠的代理阵列,从而最大限度地节约带宽。
S q u i d由一个主要的服务程序s q u i d ,一个D N S查询程序d n s s e r v e r,几个重写请求和执行认证的程
序,以及几个管理工具组成。当S q u i d启动以后,它可以派生出预先指定数目的d n s s e r v e r进程,而每
一个d n s s e r v e r进程都可以执行单独的D N S查询,这样一来就大大减少了服务器等待D N S查询的时间。
8.2.6 选择
从上面的比较可以看出,A p a c h e主要功能是w e b服务器,代理功能只不过是其一个模块而已,
S o c k s虽然强大,但有欠灵活, TIS FWTK不但下载太麻烦,安装配置也挺烦人。至于 d e l e g a t e和
s q u i d,d e l e g a t e支持的协议更多,并且也支持缓存,为什么我们还要选择 s q u i d呢?笔者认为虽然
d e l e g a t e支持的协议比较多,但事实上值得作缓存的协议不过有 H T T P和F T P两种,只要我们用
i p c h a i n s + s q u i d的解决
,就可以在获得通过缓存高性能的同时使用户能够无缝地访问 I n t e r n e t。
因此我们着重推荐使用S q u i d。下面我们就一起来学习S q u i d激动人心的特性及相关的安装与配置。
8.3 安装Squid Proxy Server
8.3.1 获取软件
可以通过以下途径获取该软件: 1) 从S q u i d的官方站点h t t p : / / w w w. s q u i d - c a c h e . o rg下载该软
第8章 L i n u x代理服务器计计237
下载
件。2) 从l i n u x发行版本中获取该软件;
通常,S q u i d软件包有两种:一种是源代码(下载后需要自己重新编译),可执行文件(下载
后只需解压就可以使用);另一种是 R e d H a t所使用的r p m包。下面我们分别讲讲这两种软件包的
安装方法。
8.3.2 安装软件
我们以目前最新的稳定版本 s q u i d - 2 . 3 . S TA B L E X为例。
1. rpm包的安装
1) 进入/ m n t / c d r o m / R e d H a t / R P M S。
2) 执行rpm -ivh squid-2.2.STA B L E 4 - 8 . i 3 8 6 . r p m。
当然,我们也可以在开始安装系统的过程中安装该软件。
2. 源代码包的安装
1) 从h t t p : / / w w w. s q u i d - c a c h e . o rg下载s q u i d - 2 . 3 . S TA B L E 2 - s r c . t a r. g z。
2) 将该文件拷贝到 / u s r / l o c a l目录。
3) 解开该文件 tar xvzf squid-2.3.STA B L E 2 - s r c . t a r. g z。
4) 解开后,在/ u s r / l o c a l生成一个新的目录s q u i d - 2 . 3 . S TA B L E 2,为了方便使用m v命令,将该
目录重命名为s q u i d :
mv squid-2.3.STABLE2 squid;
5) 进入s q u i d。
cd squid
6) 执行. / c o n f i g u r e,可以用 ./confgure --prefix=/directory/you/want指定安装目录。系统默认
安装目录为 / u s r / l o c a l / s q u i d。
7) 执行 make all。
8) 执行 make install。
9) 安装结束后,s q u i d的可执行文件在安装目录的b i n子目录下,配置文件在e t c子目录下。
8.4 配置s q u i d基础篇—让代理服务器跑起来
由于R e d H a t各方面的优势(包括易用性,稳定性等等),全世界范围内使用该发行版的用户
比较多,所以,我们下面的说明以 R e d H a t 6 . 1环境下s q u i d - 2 . 2 . S TA B L E 4 - 8版本为主。该版本的
s q u i d要比其他版本稳定的多,以前的 1 . 1 . 2 2版本也比较稳定,但是在功能及灵活性方面有所欠
缺。
s q u i d有一个主要的配置文件 s q u i d . c o n f ,在R e d H a t环境下所有s q u i d的配置文件位于 / e t c / s q u i d
子目录下。
8.4.1 常用的配置选项
因为默认的配置文件有问题,所以我们必须首先修改该配置文件的有关内容 ,以便让s q u i d跑
起来。
下面我们来看一看s q u i d . c o n f文件的结构以及一些常用的选项。
s q u i d . c o n f配置文件可以分为十三个部分,这十三个部分分别是:
1) NETWORK OPTIONS (有关的网络选项)。
2) OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居
选择算法的有关选项)。
3) OPTIONS WHICH AFFECT THE CACHE SIZE (定义c a c h e大小的选项 )。
4) LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径及c a c h e的目
录)。
5) OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)。
6) OPTIONS FOR TUNING THE CACHE (调整c a c h e的选项)。
7) TIMEOUTS(超时)。
8) ACCESS CONTROLS (访问控制)。
9) ADMINISTRATIVE PARAMETERS (管理参数)。
10) OPTIONS FOR THE CACHE REGISTRATION SERVICE (c a c h e注册服务选项)。
11) HTTPD-ACCELERATOR OPTIONS (H T T P D加速选项)。
12) MISCELLANEOUS (杂项)。
13) DELAY POOL PARAMETERS (延时池参数)。
虽然s q u i d的配置文件很庞大,但是如果你只是为一个中小型网络提供代理服务,并且只准
备使用一台服务器,那么,只需要修改配置文件中的几个选项。这些几个常用选项分别是:
1. http_port
定义s q u i d监听H T T P客户连接请求的端口。默认是 3 1 2 8,如果使用H T T P D加速模式,则为
8 0。可以指定多个端口,但是所有指定的端口都必须在一条命令行上。
2. cache_mem (bytes)
该选项用于指定s q u i d可以使用的内存的理想值。这部分内存被用来存储以下对象:
• In-Transit objects (传入的对象)。
• Hot Objects (热对象,即用户常访问的对象)。
• Negative-Cached objects (消极存储的对象)。
需要注意的是,这并没有指明 s q u i d所使用的内存一定不能超过该值,其实,该选项只定义
了s q u i d所使用的内存的一个方面, s q u i d还在其他方面使用内存。所以 s q u i d实际使用的内存可能
超过该值。默认值为8 M B。
3. cache_dir Directory-Name Mbytes Level-1 Level2
指定s q u i d用来存储对象的交换空间的大小及其目录结构。可以用多个 c a c h e _ d i r命令来定义
多个交换空间,并且这些交换空间可以分布在不同的磁盘分区。 "directory "指明了该交换空间的
顶级目录。如果想用整个磁盘来作为交换空间,那么可以将该目录作为装载点将整个磁盘挂装
上去。默认值为 / v a r / s p o o l / s q u i d。M b y t e s定义了可用的空间总量。需要注意的是, s q u i d进程必
须拥有对该目录的读写权力。 L e v e l - 1是可以在该顶级目录下建立的第一级子目录的数目,默认
值为1 6。同理,L e v e l - 2是可以建立的第二级子目录的数目,默认值为 2 5 6。为什么要定义这么多
238计计GNU/Linux高级网络应用服务指南
下载
子目录呢?因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这会导致系
统寻找某一个文件的时间大大增加,从而使系统的整体性能急剧降低。所以,为了减少每个目
录下的文件数量,必须增加所使用的目录的数量。如果仅仅使用一级子目录,则顶级目录下的
子目录数目太大了,所以使用两级子目录结构。
那么,怎么来确定系统所需要的子目录数目呢?可以用下面的
来估算。
已知量:
DS = 可用交换空间总量(单位K B)/ 交换空间数目
OS = 平均每个对象的大小= 20k
NO = 平均每个二级子目录所存储的对象数目 = 256
未知量:
L1 = 一级子目录的数量
L2 = 二级子目录的数量
计算公式:
L1xL2 = DS / OS / NO
注意,这是个不定方程,可以有多个解。
4. acl
定义访问控制列表。
定义语法为:
acl aclname acltype string1 ...
acl aclname acltype "file" ...
当使用文件时,该文件的格式为每行包含一个条目。
acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method
browser user 中的一种。
• src 指明源地址。可以用以下的方法指定:
acl aclname src ip-address/netmask ... 客户ip 地址
acl aclname src addr1-addr2/netmask ... 地址范围
• dst 指明目标地址。语法为:
acl aclname dst ip-address/netmask ... 即客户请求的服务器的ip 地址
• srcdomain 指明客户所属的域。语法为:
acl aclname srcdomain foo.com ... squid 将根据客户ip 反向查询DNS
• dstdomain 指明请求服务器所属的域。语法为:
acl aclname dstdomain foo.com ... 由客户请求的URL决定
注意,如果用户使用服务器 i p而非完整的域名时, s q u i d将进行反向的D N S解析来确定其完
整域名,如果失败,就记录为“ n o n e”。
• time 指明访问时间。语法如下:
acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
day-abbrevs:
第8章 L i n u x代理服务器计计239
下载
240计计GNU/Linux高级网络应用服务指南
下载
S - Sunday
M - Monday
T - Tuesday
W - Wednesday
H - Thursday
F - Friday
A - Saturday
h 1 : m 1必须小于 h 2 : m 2,表达示为[ h h : m m - h h : m m ]。
• port 指定访问端口。可以指定多个端口,比如:
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一个端口范围
• proto 指定使用协议。可以指定多个协议:
acl aclname proto HTTP FTP ...
• method 指定请求方法。比如:
acl aclname method GET POST ...
5. http_access
根据访问控制列表允许或禁止某一类用户访问。
如果某个访问没有相符合的项目 ,则默认为应用最后一条项目的“非”。比如最后一条为允许,
则默认就是禁止。通常应该把最后的条目设为 "deny all" 或 "allow all" 来避免安全性隐患。
8.4.2 应用实例
假定:某公司用 s q u i d作代理服务器,该代理服务器配置为 P I I 4 5 0 / 2 5 6 M / 8 . 4 G ,公司所用 i p段
为1 . 2 . 3 . 0 / 2 4 ,并且想用8 0 8 0作为代理端口。
则相应的s q u i d配置选项为:
1. http_port
http_port 8080
2. cache_mem
思路:由于该服务器只提供代理服务,所以该值可以尽量设得大一些。
cache_mem 194M
3. cache_dir Directory-Name Mbytes Level-1 Level2
思路:硬盘为 8 . 4 G的,在安装系统时应该做好规划,为不同的文件系统划分可用空间。在
本例中,可以这样来划分:
/cache1 3.5G
/cache2 3.5G
/var 400M
swap 127M
/ 剩余部分
在安装时,我们尽量不安装不必要的包。这样在节约空间的同时可以提高系统的安全性和
稳定性。下面我们来计算所需的第一级和第二级子目录数。
已知量:
DS = 可用交换空间总量(单位K B)/ 交换空间数目=7 G / 2 = 3 5 0 0 0 0 0 K B
OS = 平均每个对象的大小= 20k
NO = 平均每个二级子目录所存储的对象数目 = 256
未知量:
L1 = 一级子目录的数量
L2 = 二级子目录的数量
计算公式:
L 1×L2 = DS / OS / NO=3 5 0 0 0 0 0 / 2 0 / 2 5 6 = 6 8 4
我们取
L 1 = 1 6
L 2 = 4 3
所以,我们的c a c h e _ d i r语句为:
cache_dir /cache1 3500M 16 43
cache_dir /cache2 3500M 16 43
4. acl
思路:通过s r c来定义a c l .
acl allow_ip src 1.2.3.4/258.258.258.0
5. http_access
http_access allow allow_ip
8.4.3 启动、停止s q u i d
配置并保存好s q u i d . c o n f后,可以用以下命令启动 s q u i d。
squid
或者,使用R e d H a t的启动脚本来启动s q u i d。
/etc/rc.d/init.d/squid start
同样,也可以用下列脚本停止运行 s q u i d或重启动s q u i d。
/etc/rc.d/init.d/squid stop
/etc/rc.d/init.d/squid restart
8.4.4 如何判断s q u i d已经正常启动
可以通过p s命令查看s q u i d服务是否已经正常启动 ,如:
ps -A |grep squid
如果出现如下信息:
15342 ? 00:00:00 squid
15343 ? 00:00:00 squid
第8章 L i n u x代理服务器计计241
下载
则表明s q u i d服务已经正常启动。
8.4.5 客户端的配置
接下来,我们来看看客户端浏览器的配置。 N e t s c a p e的N a v i g a t o r和M i c r o s o f t的I n t e r n e t
E x p l o r e是两种最常见的浏览器,我们看看怎样在这两种浏览器中配置代理服务器。
8.4.6 在Netscape Navigator中配置代理服务
1) 运行Netscape Navigator,单击“编辑”菜单中的“首选项”(见图8 - 4);
图8-4 Netscape Navigator的欢迎光临对话框
2) 在弹出的“首选项”窗口中双击“高级”,再单击“代理”,然后选中“手工配置代理”,
单击“察看”(见图8 - 5);
图8-5 首选项对话框
3) 在弹出的“手工配置代理”对话框(见图 8 - 6)中填写相应的代理服务器的 i p地址和服务
端口,然后单击“确定”。
242计计GNU/Linux高级网络应用服务指南
下载
图8-6 手工配置代理对话框
8.4.7 在Microsoft Internet Explore5中配置代理服务器
1) 运行Microsoft Internet Explore5,单击“工具”菜单中的“ I n t e r n e t选项”(见图8 - 7);
2) 在弹出的“ I n t e r n e t选项”中单击“连接”,再单击下面的“局域网设置”(见图8 - 8);
图8-7 Internet Explore 5对话框
图8-8 Internet选项对话框
第8章 L i n u x代理服务器计计243
下载
3) 在弹出的“局域网设置”窗体中选中“使用代理服务器”并单击“高级”(见图8 - 9);
4) 在弹出的“代理服务器设置”对话框中(见图 8 - 1 0)填入相应的代理服务器的 i p地址和服
务端口,然后单击“确定”。
图8-9 局域网设置对话框
图8-10 代理服务器设置
8.5 根据需求配置s q u i d—进阶篇
8.5.1 其他配置选项
在进行s q u i d的一些高级应用之前,有必要对其他有用的配置选项作一个全面的了解。下面
我们分类来讲一讲这些选项,用于某些特殊应用的选项将在适当的地方讲述。
1. 网络选项
tcp_incoming_address
244计计GNU/Linux高级网络应用服务指南
下载
tcp_outgoing_address
udp_incoming_address
udp_outgoing_address
t c p _ i n c o m i n g _ a d d r e s s监听来自客户或其他s q u i d代理服务器的绑定 i p地址。
t c p _ o u t g o i n g _ a d d r e s s向远程服务器或其他s q u i d代理发起连接的 i p地址。
u d p _ i n c o m i n g _ a d d r e s s为I C P套接字指定接收来自其他 s q u i d代理服务器的包的 i p地址。
u d p _ o u t g o i n g _ a d d r e s s为I C P套接字指定向其他squid server发送包的 i p。
默认为没有绑定任何 i p地址。该绑定地址可以用 i p指定,也可以用完整的域名指定。
2. 交换空间设定选项
cache_swap_low (percent, 0-100)
cache_swap_high (percent, 0-100)
s q u i d使用大量的交换空间来存储对象。过了一定的时间以后,该交换空间就会用完,所以
还必须定期的按照某种指标来将低于某个水平线的对象清除。 s q u i d使用所谓的“最近最少使用
算法”(L R U)来做这一工作。当已使用的交换空间达到 c a c h e _ s w a p _ h i g h时,s q u i d就根据L R U
所计算的得到每个对象的值,将低于某个水平线的对象清除。这种清除工作一进行到已用空间
达到c a c h e _ s w a p _ l o w。这两个值用百分比表示,如果所使用的交换空间很大的话,建议减少这
两个值得差距,因为这时一个百分点就可能是几百兆空间,这势必影响 s q u i d的性能。默认为:
cache_swap_low 90
cache_swap_high 95
• maximum_object_size 大于该值的对象将不被存储。如果想要提高访问速度,就请降低该
值;如果想最大限度地节约带宽,降低成本,请增加该值。单位为 K,默认值为:
maximum_object_size 4096 KB
3. 有关日志的选项
(1) cache_access_log
指定客户请求记录日志的完整路径(包括文件的名称及所在的目录),该请求可以是来自一
般用户的H T T P请求或来自邻居的 I C P请求。默认值为:
cache_access_log /var/log/squid/access.log
如果不需要该日志,可以用以下语句取消:
cache_access_log none
(2) cache_store_log
指定对象存储记录日志的完整路径(包括文件的名称及所在目录),该记录表明哪些对象被
写到交换空间,哪些对象被从交换空间清除。默认路径为:
cache_log /var/log/squid/cache.log
如果不需要该日志,可以用以下语句取消:
cache_store_log none
(3) cache_log
指定s q u i d一般信息日志的完整路径(包括文件的名称及所在的目录)。默认路径为:
第8章 L i n u x代理服务器计计245
下载
246计计GNU/Linux高级网络应用服务指南
下载
cache_log /var/log/squid/cache.log
(4) cache_swap_log
该选项指明每个交换空间的 s w a p . l o g日志的完整路径(包括文件的名称及所在的目录)。该
日志文件包含了存储在交换空间里的对象的元数据( m e t a d a t a)。通常,系统将该文件自动保存
在第一个 c a c h e _ d i r说定义的顶级目录里,但是也可以指定其他的路径。如果定义了多个
c a c h e _ d i r,则相应的日志文件可能是这样的:
cache_swap_log.00
cache_swap_log.01
cache_swap_log.02
后面的数字扩展名与指定的多个 c a c h e _ d i r一一对应。需要注意的是,最好不要删除这类日
志文件,否则s q u i d将不能正常工作。
(5) pid_filename
指定记录s q u i d进程号的日志的完整路径(包括文件的名称及所在的目录)。默认路径为
pid_filename /var/run/squid.pid
如果不需要该文件,可以用以下语句取消:
pid_filename none
(6) debug_options
控制作日志时记录信息的多寡。可以从两个方面控制: s e c t i o n控制从几个方面作记录;
l e v e l控制每个方面的记录的详细程度。推荐的方式(也是默认方式)是:
debug_options ALL,1
即,对每个方面都作记录,但详细程度为 1 (最低)。
(7) log_fqdn o n | o ff
控制在 access.log 中对用户地址的记录方式。打开该选项时, s q u i d记录客户的完整域名,
取消该选项时, s q u i d记录客户的 i p地址。注意,如果打开该选项,会增加系统的负担,因为
s q u i d还得进行客户 i p的D N S查询。默认值为: log_fqdn off。
4. 有关外部支持程序的选项
(1) ftp_user
设置登录匿名 f t p服务器时提供的电子邮件地址,登录匿名 f t p服务器时要求用电子邮件地址
作为登录口令(更多的信息请参看本书的相关章节)。需要注意的是,有的匿名 f t p服务器对这一
点要求很苛刻,有的甚至会检查电子邮件的有效性。默认值为: ftp_user Squid@
(2) ftp_list_width
设置f t p列表的宽度,如果设得太小,将不能浏览到长文件名。默认值为: ftp_list_width 32
(3) cache_dns_program
指定D N S查询程序的完整路径(包括文件的名称及所在的目录)。默认路径为:
cache_dns_program /usr/lib/squid/dnsserver
(4) dns_children
设置D N S查询程序的进程数。对于大型的登录服务器系统,建议该值至少为 1 0。最大值可
以是3 2,默认设置为5个。注意,如果任意地降低该值,可能会使系统性能急剧降低,因为 s q u i d
主进程要等待域名查询的结果。没有必要减少该值,因为 D N S查询进程并不会消耗太多的系统
的资源。
(5) dns_nameservers
指定一个D N S服务器列表,强制s q u i d使用该列表中的D N S服务器而非使用 / e t c / r e s o l v. c o n f文
件中定义的D N S服务器。可以这样指定多个D N S服务器:dns_nameservers 10.0.0.1 192.172.0.4
默认设置为:dns_nameservers none
(6) unlinkd_program
指定文件删除进程的完整路径。
默认设置为:unlinkd_program /usr/lib/squid/unlinkd
(7) pinger_program
指定p i n g进程的完整路径。该进程被 s q u i d利用来测量与其他邻居的路由距离。该选项只在
启用了该功能时有用。默认为:
pinger_program /usr/lib/squid/pinger
(8) authenticate_program
指定用来进行用户认证的外部程序的完整路径。 s q u i d的用户认证功能将在后面讲述。默认
设置为不认证。
8. 用户访问控制选项
(1) request_size (KB)
设置用户请求通信量的最大允许值 (单位为K B )。如果用户用P O S T方法请求时,应该设一个
较大的值。默认设置为:
request_size 100 KB
(2) reference_age
s q u i d根据对象的L R U(最近最少使用算法)来清除对象, s q u i d依据使用磁盘空间的总量动
态地计算对象的L R U年龄。我们用r e f e r e n c e _ a g e定义对象的最大L R U年龄。如果一个对象在指定
的r e f e r e n c e _ a g e内没有被访问, s q u i d将删除该对象。默认值为一个月。可以使用如下所示的时
间表示方法。
1 week
3.5 days
4 months
2.2 hours
(3) quick_abort_min( K B )
quick_abort_max (KB)
quick_abort_pct (percent)
控制s q u i d是否继续传输被用户中断的请求。当用户中断请求时, s q u i d将检测quick_abort 的
值。如果剩余部分小于q u i c k _ a b o r t _ m i n指定的值,squid 将继续完成剩余部分的传输;如果剩余
部 分 大 于 q u i c k _ a b o r t _ m a x指 定 的 值 , squid 将 终 止 剩 余 部 分 的 传 输 ; 如 果 已 完 成
第8章 L i n u x代理服务器计计247
下载
“q u i c k _ a b o r t _ p c t "指定的百分比,s q u i d将继续完成剩余部分的传输。默认的设置为:
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
6. 各类超时设置选项
(1) negative_ttl time-units
设置消极存储对象的生存时间。所谓的消极存储对象,就是诸如“连接失败”及 404 Not
F o u n d等一类错误信息。默认设置为: negative_ttl 5 minutes。
(2) positive_dns_ttlt i m e - u n i t s
设置缓存成功的D N S查询结果的生存时间。默认为6小时。
positive_dns_ttl 6 hours
(3) negative_dns_ttlt i m e - u n i t s
设置缓存失败的D N S查询结果的生存时间。默认为5 m i n。
negative_dns_ttl 5 minutes
(4) connect_timeout time-units
说明:设置s q u i d等待连接完成的超时值。默认值为 2 m i n。
connect_timeout 120 seconds
(5) read_timeout time-units
如果在指定的时间内s q u i d尚未从被请求的服务器读入任何数据,则 s q u i d将终止该客户请求。
默认值为1 5 m i n。
read_timeout 15 minutes
(6) request_timeout
设置在建立与客户的连接后, s q u i d将花多长时间等待客户发出H T T P请求。默认值为3 0 s。
request_timeout 30 seconds
(7) client_lifetime time-units
设置客户在与s q u i d建立连接后,可以将该连接保持多长时间。
注意,因为客户建立的每个连接都会消耗一定的系统资源,所以如果是为一个大型网络提
供代理服务的话,一定要正确地修改该值。因为如果同一时间的连接数量太大的话,可能会消
耗大量的系统资源,从而导致服务器宕机。默认值为 1天,该值太大了,建议根据自己的情况适
当减小该值。
client_lifetime 1 day
(8) half_closed_clients on/off
有时候由于用户的不正常操作,可能会使与 s q u i d的T C P连接处于半关闭状态,这时候,该
T C P连接的发送端已经关闭,而接收端正常工作。默认时, s q u i d将一直保持这种处于半关闭状
态的T C P连接,直到返回套接字的读写错误才将其关闭。如果将该值设为 o ff,则一旦从客户端
返回“no more data to read”的信息,s q u i d就立即关闭该连接。half_closed_clients on
248计计GNU/Linux高级网络应用服务指南
下载
(9) pconn_timeout
设置s q u i d在与其他服务器和代理建立连接后,该连接闲置多长时间后被关闭。默认值为 1 2 0
秒。
pconn_timeout 120 seconds
(10) ident_timeout
设置s q u i d等待用户认证请求的时间。默认值为 1 0 s。
i dent_timeout 10 seconds
( 11) shutdown_lifetime time-units
当收到SIGTERM 或者 SIGHUP 信号后, squid将进入一种shutdown pending的模式,等待所
有活动的套接字关闭。在过了 s h u t d o w n _ l i f e t i m e所定义的时间后,所有活动的用户都将收到一个
超时信息。默认值为3 0 s。
shutdown_lifetime 30 seconds
7. 管理参数选项
(1) cache_mgr
设置管理员邮件地址。默认为:
cache_mgr root
(2) cache_eff e c t i v e _ u s e r
cache_effective_group
如果用r o o t启动s q u i d,s q u i d将变成这两条语句指定的用户和用户组。默认变为 s q u i d用户和
s q u i d用户组。注意这里指定的用户和用户组必须真是存在于 / e t c / p