【教学课件】第17章Proxy服务器.ppt
第17章 Proxy服务器,17.1 Proxy的概念17.2 利用Apache建立Proxy17.3 Squid,17.1 Proxy的概念,17.1.1 什么是Proxy在TCP/IP网络中,传统的通信过程是:客户端向服务器请求数据,服务器响应该请求,将数据发送给客户端。在引入了代理服务器以后,这一过程变成了:客户端向服务器发请求,该请求被送到代理服务器;代理服务器分析该请求,先查看自己缓存中是否有请求数据;如果有就直接传送给客户端;如果没有就代替客户端向该服务器发出请求。服务器响应以后,代理服务器将响应的数据传送给客户端,同时在自己的缓存中保留一份该数据的拷贝。这样,再有客户端请求相同的数据时,代理服务器就可以直接将数据传送给客户端,而不需要再向该服务器发出请求。,17.1.2 Proxy的应用1.通过缓存增加访问速度通常,缓存分为主动缓存和被动缓存。被动缓存,指的是代理服务器只在客户端请求数据时才将服务器返回的数据进行缓存,如果数据过期了,又有客户端请求相同数据时,代理服务器又必须重新发出新的数据请求,在将响应数据传送给客户端时又进行新的缓存。所谓主动缓存,就是代理服务器不断地检查缓存中的数据,一旦有数据过期,则代理服务器主动发起新的数据请求来更新数据。,2.提供用私有IP访问Internet的方法IPv4的IP地址是有限的,如果你只有有限的IP地址,但是却想让整个内部网的用户能访问Internet,有多种方法可以实现这一需求。代理服务器是其中的一种。3.提高网络的安全性如果内部网用户都是通过代理服务器访问Internet的,那么代理服务器就是进入Internet的惟一入口;如果你做了反向代理,则对于Internet上的主机来说,代理服务器也是Internet访问内部网的惟一通道。整个内部网在Internet上是不可见的,所以代理服务器软件有时也称为软件防火墙。,17.2 利用Apache建立Proxy,17.2.1 配置前的准备工作如果是全新编译Apache,那么在解压后的目录下面运行下面的命令:./confguire prefix=/path/-enable-mode=proxy只需要为./configure多加enable-mode=proxy就可以了,接着是编译和安装:makemake install如果是已经安装好的Apache服务器,那么先停止Apache服务器,然后切换到ServerRoot的目录下面。编译和安装完成后,切换到ServerRoot的目录下面,再次执行./bin/httpdl以确认Apache已经载入了mod_proxy模块。,17.2.2 建立Proxy服务器使用Apache做代理服务器是一条非常简单的事件,在httpd.conf里面找到下面这一段:#ProxyRequests On#Order deny,allow#Deny from all#Allow from.your_#只要稍微修改一下这段话,就能实现Proxy的功能。,首先去掉这段配置的所有行前面的注释,然后修改为如下:ProxyRequests On Order deny,allow Deny from all Allow from 172.168这里假设所在的内部网络使用172.168.*的IP,重启一次Apache,那么所在的内部网络上的主机已经能够利用这部机的Proxy功能上网了。,下面来分析上机这段配置,ProxyRequests是用来打开或者关闭Proxy功能的。容器是用来定制Proxy服务器的访问权限。如果需要级连到上级的Proxy服务器,那么在上面配置的后面加入下面一行:ProxyRemote*remote-proxy-server-URL:port例如:假设有上一级的代理服务器,它的端口是3128,那么ProxyRemote是这样的:ProxyRemote*http:/:3128,17.2.3 建立Cache服务器Apache的cache服务器是在Proxy服务器的基础上对客户机所访问的网页提供Cache的功能,以提高下一次访问的速度。建立Cache服务器和建立Proxy服务器一样简单,Proxy服务器后面有这么几行指令:#CacheRoot/usr/local/apache/proxy#CacheSize 5#CacheGcInterval 4#CacheMaxExpire 24#CacheLastModifiedFactor 0.1#CacheDefaultExpire 1#NoCache a_ another_domain.edu,CacheRoot/usr/local/apache/proxy 这条指令指定了用来存放缓存文件的目录。CacheSize 5:条指令指定了CacheRoot的磁盘空间大小(以K字节为单位),这里的默认设置是5K,是比较少的,一般可以根据实际的访问量来设置这个参数的大小,一般建议在10MB以上。CacheMaxExpire 24:个参数定义了缓存文件的过期时间。CacheGcInterval 4:个参数定义了Apache每隔多长时间(以小时为单位),就检查CacheRoot并删除过时的缓存文件。CacheLastModifiedFactor 0.1:如果原HTTP服务器不提供某个文件的终止时间,那么使用以下的公式来确定一个文件的终止时间。expiry-period=time-since-last-modification*factor factor就是,CacheLastModifiedFactor定义的参数。例如一个文件最后修改时间是10小时,factor是0.1,那么,该文件的终止时间是1小时,如果计算得到的时间比CacheMaxExpire所定义的时间大,那么以CacheMaxExpire定义的时间为准。CacheDefaultExpire 1:如果通过某个不能提供终止时间的协议获取一个文件,那么使用CacheDefaultExpire定义的时间(同样是以小时为单位)作为该文件的终止时间。NoCache Nocahe:该指令指定了对某些主机、域名和IP地址列表的访问不做缓存操作。Nocahe*:相当于关闭了cache功能。,17.2.4 常用的mod_proxy模块的指令ProxyBlock*|word|host|domain word|host|domain.这一指令限制客户机对指定的主机或是域名的访问。ProxyBlock*这条指令相当于关闭了Proxy的功能。ProxyDomain Domain当Apache服务器位于企业内部网(Intranet)上,该指令才会起作用,它指定了一个缺省的本地域名,那么客户机的访问请求中如果不包含域名,那么将以此域名作为缺省域名。ProxyPassProxyPass可以帮助你将一个Web服务器的文件目录结构映射到你的代理服务器的文件系统里。它的语法是:ProxyPass path url其中paht是本机虚拟的路径,url是远端Web站点的部分URL。,17.3 Squid,17.3.1 安装Squid17.3.2 配置SquidSquid的主配置文件为squid.conf,就是squid.conf的一个备份。,squid.conf分为13个部分。这13个部分分别是:(1)NETWORK OPTIONS(有关的网络选项)。(2)OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)。(3)OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的有关选项)。(4)LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)。(5)OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项)。(6)OPTIONS FOR TUNING THE CACHE(调整cache的选项)。,(7)TIMEOUTS(超时)。(8)ACCESS CONTROLS(访问控制)。(9)ADMINISTRATIVE PARAMETERS(管理参数)。(10)OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项)。(11)HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项)。(12)MISCELLANEOUS(杂项)。(13)DELAY POOL PARAMETERS(延时池参数)。,17.3.3 更多的配置参数1.NETWORK OPTIONS(有关的网络选项)TAG:tcp_outgoing_addressTAG:udp_incoming_addressTAG:udp_outgoing_addressUsage:tcp_incoming_addressudp_outgoing_address tcp_outgoing_address 指定向远程服务器或其他Squid代理服务器发起连接的IP地址。udp_incoming_address为ICP套接字指定接收来自其他Squid代理服务器的包的IP地址。udp_outgoing_address为ICP套接字指定向其他Squid代理服务器发送包的IP地址。缺省为没有绑定任何IP地址。该绑定地址可以用IP指定,也可以用完整的域名指定。,2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)TAG:cache_peerUsage:cache_peer hostname type http_port icp_portcache_peer:该参数是用来指定邻居(neighbor)代理服务器的,通常用了指定上一级代理服务器的。hostname:指定了邻居代理服务器的地址或者是域名。type:分别有parent、sibling、or multicast三种类型。proxy_port:邻居代理服务器侦听客户请求的端口。icp_port:邻居代理服务器侦听ICP请求的端口。options:proxy-only指定了从hostname指定的邻居代理服务器外获取对象,本地不做cache。no-query:这个参数表示不向邻居代理服务器发送ICP查询。Default:当不能向parent代理服务器进行ICP通讯时使用这个参数。login=user:password:如果parent代理服务器需要使用用户密码进行访问则可以使用这些参数。options有许多的选项,这里只讲出几个常用的。如果需要级连到上级的服务器那么可以使用下面这个语句:cache_peer 3128 0 no-query default同时还必须设置cacher_peer_access参数,后面会讲到。,3.OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的有关选项)TAG:cache_swap_low(percent,0-100)TAG:cache_swap_high(percent,0-100)Squid使用大量的交换空间来存储对象。过了一定的时间,该交换空间就会用完,所以还必须定期的按照某种指标来将低于某个水平线的对象清除。Squid使用所谓的“最近最少使用算法”(LRU)来做这一工作。,4.LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)TAG:debug_options控制作日志时记录信息的内容。从section和level两个方面控制:section控制记录了几个方面;level控制每个方面的记录的详细程度。推荐的方式(也是缺省方式)是:debug_options ALL,1,即对每个方面都作记录,但详细程度为1(最低)。log_fqdn on|off 控制在 access.log 中对用户地址的记录方式。打开该选项时,Squid记录客户的完整域名,取消该选项时,Squid记录客户的IP地址。,5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项)TAG:ftp_user设置登录匿名FTP服务器时提供的电子邮件地址,登录匿名FTP服务器时一般要求用你的电子邮件地址作为登录口令。缺省值为:ftp_user Squid TAG:ftp_list_width 设置FTP列表的宽度,如果设得太小将不能浏览到长文件名。缺省值为:ftp_list_width 32TAG:cache_dns_program指定DNS查询程序的路径。打开此参数,必须在编译的时候使用-disable-internal-dns选项。缺省路径为:cache_dns_program/usr/local/squid/libexec/squid/TAG:dns_children 设置DNS查询程序的进程数。最大值可以是32,缺省设置为:dns_children 5,TAG:dns_retransmit_interval设置DNS查询的间隔时间,缺省设置为:dns_retransmit_interval 5 secondsTAG:dns_timeout设置DNS查询超时的时间,如果在设置的时间内DNS还没有返回,则认为查询失败。缺省设置为:dns_timeout 5 minutesTAG:dns_nameservers指定DNS服务器的列表,强制Squid使用该列表中的DNS服务器而非使用系统/etc/resolv.conf文件中定义的DNS服务器。你可以同时指定多个DNS服务器,例如:dns_nameservers。缺省设置为:dns_nameservers none。TAG:unlinkd_program指定文件删除程序的完整路径。缺省设置为:unlinkd_program/usr/local/squid/libexec/squid/unlinkd,TAG:pinger_program指定ping进程的完整路径。该进程被Squid用来测量与其他邻居的路由距离。要打开此参数,必须在编译的时候使用-enable-icmp option选项。缺省为:pinger_program/usr/local/squid/libexec/squid/TAG:authenticate_program 指定用来进行用户认证的外部程序的完整路径。缺省设置为不认证。Squid的认证功能是通过外挂程序来实现的。也就是说,认证并不是Squid进程本身进行处理的。当Squid启动时同时会启动若干子进程,来对用户和密码进行处理。,在Squid的源程序包里面带有几种认证程序,分别是:LDAP、NCSA、MSNT、PAM、SMB、getpwam。除了这些认证程序之外,还有下面几种:基于mysql的用户认证。更多的信息请访问以下资源:基于sock5密码用户认证。更多的信息请访问以下资源:http:/基于Radius 的用户认证。更多的信息请访问以下资源:http:/,6.OPTIONS FOR TUNING THE CACHE(调整cache的选项)TAG:reference_ageSquid根据对象的LRU(Least Recently Used最近最少使用算法)来清除对象,Squid依据使用磁盘空间的总量动态地计算对象的LRU年龄。我们用reference_age定义对象的最大LRU年龄。如果一个对象在指定的reference_age内没有被访问,Squid将删除该对象。缺省值为:reference_age 1 year,7.TIMEOUTS(超时)TAG:connect_timeout time-units有时候不能依靠系统建立连接超时,因此Squid自定义了自己的超时时间。缺省设置是:connect_timeout 2 minutesTAG:read_timeout time-units 如果在指定的时间内Squid尚未从被请求的服务器读入任何数据,则Squid将终止该客户请求。缺省值为15分钟。read_timeout 15 minutes TAG:request_timeout 设置在建立与客户的连接后,Squid将花多长时间等待客户发出HTTP请求。缺省值为30秒。request_timeout 30 seconds TAG:client_lifetime time-units 设置客户在与Squid建立连接后,可以将该连接保持多长时间。,8.ACCESS CONTROLS(访问控制)TAG:aclacl aclname acltype string1.acl aclname acltype file.aclname 是定义的该ACL规则的名字。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.Squid将根据客户ip反向查询DNS。dstdomain 指明请求服务器所属的域。语法为:acl aclname dstdomain.由客户请求的URL决定。time 指明访问时间。语法如下:acl aclname time day-abbrevs h1:m1-h2:m2hh:mm-hh:mm day-abbrevs:S-Sunday M-Monday T-Tuesday W-Wednesday H-Thursday F-Friday A-Saturday h1:m1 必须小于 h2:m2,表达示为hh:mm-hh:mm。port 指定访问端口。可以指定多个端口,proto 指定使用协议。可以指定多个协议:acl aclname proto HTTP FTP.method 指定请求方法。比如:acl aclname method GET POST.acl定义的一些技巧,如果定义的一条ACL规则,并不是对一个连续的IP段进行定义的,而是对一些分散的IP进行定义,那么可以利用hosts文件来简化squid.conf文件的配置。,9.ADMINISTRATIVE PARAMETERS(管理参数)TAG:cache_mgr设置管理员邮件地址。例如:cache_mgr 缺省为:cache_mgr root 10.HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项)TAG:httpd_accel_hostTAG:httpd_accel_port11.MISCELLANEOUS(杂项)TAG:dns_testnames 设置进行DNS查询测试,如果第一个站点解析成功,则立即结束DNS查询测试。如果你不愿意进行DNS查询测试,就不要去掉缺省的设置。dns_testnames TAG:logfile_rotate,17.3.4 启动和关闭Squid使用tar包安装和使用rpm包安装两种方法的启动和关闭Squid是略有不同的。1.Rpm包安装Squid的启动和关闭的方法Rpm包安装的Squid,它的启动关闭是比较简单的,因为别人已经帮用户做好了一系列的脚本,只要简单的运行就行了。Squid的启动和关闭文件在/etc/init.d/下面的Squid文件中。用法:/etc/init.d/squid start|stop|status|reload|restart|condrestart如果要启动可以执行下面的命令:/etc/init.d/squid start如果要关闭可以执行下面的命令:/etc/init.d/squid stop如果要重启可以执行下面的命令:/etc/init.d/squid restart,2.tar包安装Squid的启动和关闭的方法tar包安装的Squid的启动关闭要比rpm安装麻烦一点。在Squid的安装目录下的bin目录下面(默认是/usr/local/squid,假如在安装时改变了安装目录的位置,那使用相应的位置)有一个Squid的可执行文件。这就是Squid的启动文件。启动Squid只需执行下面的命令:/usr/local/squid/bin/squid可以执行下面的命令来获取帮助。/usr/local/squid/bin/squid h,17.3.5 日志文件Squid的log文件是Squid的工作量、性能等有用的信息资源。Log文件记录了:访问信息、系统配置错误、资源消耗(例如:内存、硬盘空间)等。1.squid.out 如果是通过RunCache脚本来启动Squid,那么,会有一个squid.out的脚本生成,它记录了Squid启动的时候,同时也记录了Squid的致命性错误,例如:由assert()所产生的错误。2.cache.logcache.log文件包含了Squid产生的调试和错误消息。如果使用RunCache脚本启动Squid,或者是在命令行使用了-s选项来启动Squid的话,那么每一条消息的拷贝同时会记录到syslog文件里面。,3.access.log很多分析日志文件的程序都是以access.log为基础的。access.log存在两种日志格式,如果在配置Squid的时候,打开了emulate_httpd_log,那么将以http为日志文件格式。默认是Squid本身的日志文件格式。4.store.logstore.log文件记录缓存数据当前被保存到硬盘或者从硬盘上移除。,17.3.6 定时清除日志squid在运行一段时间过后,各种日志都会不断增大,如果大到一定程度,squid在写日志的时候会占用比较多的CPU时钟,而且,到了一定程度squid不能写的时候进程自动停止。为了避免这种情况的发生,在系统运行的过程中定时地进行日子文件的更新。定时更新可以使用squid的一个参数-k rotate。可以命令 crontab e;然后在里面添加:0 3*/usr/local/squid/bin/squid k rotate这里/usr/local/squid/bin/squid是指squid的路径,如果是用rpm包装的话这个路径可能是/usr/sbin,具体可以用which squid查询。,小结本章详细的介绍了Proxy服务器Apache和Squid的配置。通过本章的学习,读者应该可以轻松的配置自己的Proxy服务器了。Squid作为一个功能强大的Proxy服务器软件。并不局限于本章的介绍,要使Squid运行得更加稳定、效率更高,还需要在平时积累经验。,