技术开发 频道

[应用]Apache服务器之代理服务

【IT168技术文档】代理服务器是位于客户和客户要访问的服务器之间的系统。当客户机使用URL请求访问远程资源时,代理服务器接受该请求并取得该资源以满足客户机的请求。在通常情况下,代理服务器是客户机的服务器,同时也是远程服务器的客户。

    代理服务器可以在自己的缓冲区中存储被请求的内容,当这些信息再次被请求的时候,代理服务器就无需再从远程服务器上取了,这样代理服务器就减轻了网络的瓶颈问题。大家知道,Apache不仅可作为Web服务器,它还包含了代理服务器(Proxy Server)的功能。因此Apache可以配置成代理服务器,我们根据实际需要,可以配置成为正向和逆(反)向代理。

    正向代理是一个能使我们的浏览器连接一个平时无法访问的远端网络的媒介。一个正向代理也能用于缓冲数据,以降低正向代理和远端web服务器之间的负载。逆(反)向代理是一个web服务器系统。除了为客户端提供位于本地磁盘上的页面或是由CGI动态生成的页面之外,它还能为客户端提供位于其它web服务器上的web页面,从而使这些页面看起来像是存在于这个代理服务器上一样。


    为了允许Apache作为代理服务器,需要将ProxyRequests设为On,所有请求均可由这台代理服务器代理服务。然后根据我们希望代理服务器做什么而增加什么附加配置。无论希望做什么,我们所选的代理配置都应该放入一个特殊的<Directory>容器中。
……… ProxyRequests On <Directory proxy:*> ……… </Directory> ………
下面是在apache的配置文件httpd.conf简单说明:

LoadModule proxy_module modules/libproxy.so ←加载proxy模块
AddModule mod_proxy.c ←增加mod_proxy.c模块
<IfModule mod_proxy.c> ←如果前面加入此模块,则启用里面的设置
ProxyRequests On ←设为On表示启用代理服务
<Directory proxy:*>
Order deny,allow
Deny from all
Allow from .ghq.com ←将允许使用代理服务的网站名称或IP地址填入,此例表示凡来自ghq.com域的计算机都可使用,也可用IP来表示,如202.102.24.表示凡是IP以202.102.24开头的都可使用</Directory>
ProxyVia On ←设为On表示使用Apache服务器的启动或关闭功能
CacheRoot ''/var/cache/httpd'' ←此目录存放已加载的网页
CacheSize 5000 ←默认的Cache只有5KB,根据硬盘空间大小来设置,建议设大一点,此处设为5000KB
CacheGcInterval 4 ←设置检查Cache的间隔时间,单位以小时计算,默认值为4小时
CacheMaxExpire 24 ←设置保存期限,单位以小时计算,决定Cache中的数据可存放多久,默认为24小时
CacheLastModifiedFactor 0.1 ←指定一个数值因子,以便计算过期时限。
CacheDefaultExpire 1 ←给予默认的过期时限,单位以小时计算,这里设置为1小时
</IfModule>

修改好上面的配置后,重新启动Apache服务器,即可提供代理服务。

    在客户端的网页浏览器中要指定代理服务器的地址,这样才能使用到代理服务的功能。在这里我们以微软的IE 6.0为例来说明如何设置。打开IE网页浏览器,然后执行“工具”|“Internet选项”命令,在Internet选项对话框打开连接选项卡,如下图1、图2所示:
 

图1 连接选项卡

    在图1中单击“局域网设置(L)”按钮,设置代理服务器,进入下图2。
 
图2设置代理服务器


    在图2中“自动设置”选项中选中“自动检测设置(A)”,在“代理服务器” 选项中选中“使用代理服务器”,设置好代理服务器的网址(这里为IP地址:192.168.1.1)和端口号(如80),最后单击“确认”按钮,这样就完成了客户端浏览器上设置代理服务器。

    接下来,我们可以试着连到几个网站,然后检查一下Apache服务器所设置的CacheRoot(/var/cache/httpd)目录,就可以看到已经创建了Cache的目录,这表示该台Apache服务器开始提供代理服务器的功能了。

    前向代理服务器通常位于用户主机和要访问的远程网络之间。它从远程服务器取得所要求的资源,然后返回给用户,同时存在磁盘上,以供下次使用。在这种情况下,客户端的主机知道它们正在使用代理服务器,因为每个主机都必须配置为使用代理服务器。

    例如,必须告诉WWW浏览器使用代理服务器,它才能使用代理服务器。所有的远程请求都通过代理服务器传输。这类代理服务器也称为缓冲代理服务器。逆(反)向服务器也可以缓冲数据,但它的作用则与前向服务器相反。

    前向代理服务器的结构如下图3所示:
  

图3 前向代理服务器


    Apache模块 mod_proxy实现了Apache的代理/网关。它实现了以下规范的代理FTP, CONNECT(用于SSL), HTTP/0.9, HTTP/1.0,和 HTTP/1.1。此模块经配置后可用上述或其它协议连接其它代理模块。

    此模块在Apache 1.1.x中处于试验阶段,而在Apache v1.2.x和Apache v1.3.x中进行了改良并去除了一些bug。然后在Apache v2.0中进行了大的修整。现在协议的支持已经升级到HTTP/1.1,并支持了过滤器。

    Apache的mod_proxy在使用ProxyRemote指令时,可以看作是一个正向代理。ProxyRemote 指令定义了此代理的远端代理。match可以是远端服务器支持的URL形式的名称,或是远端服务器使用的部分URL,或是'*'以代表服务器可以接受所有的请求。remote-server是远端服务器的部分URL。语法为:
    remote-server = protocol://hostname[:port]
    protocol是与远端服务器交换信息时使用的协议;本模块暂时只支持"http"。举例如下:
    ProxyRemote http://ghq.com/ http://mirrorghq.com:8888
    ProxyRemote * http://study.com

    逆(反)向代理服务器位于互联网资源前面,逆向服务器从原始服务器找到被请求的资源,并反它返回给用户主机。

    与前向代理服务器不同的是,逆(反)向代理服务器的用户并不知道它们连接的是代理服务器而不是资源服务器本身。其结构如下图4所示:
 

图4 反向代理 点击看大图


    当使用了mod_cache配置一个逆(反)向代理后,它可以作为一个比较慢的web服务器的缓冲来使用。反向代理也可以启用高级URL策略和管理技术,从而使处于不同web服务器系统或是体系的web页面同时存在于同一个URL空间下。逆(反)向代理对于实现具有很多或不同的web站点后端的集中管理非常理想。复杂的多层服务器系统可以使用一个Apache的mod_proxy前端和任意数量的后端web服务器来进行架构。

    逆(反)向代理使用ProxyPass和ProxyPassReverse指令进行配置。可以使用mod_cache和正向代理结合启用缓冲功能。

    ProxyPass 指令将一个远端服务器映射到本地服务器的URL空间中,对于我们不想对某个子目录进行反向代理时很有用。例如:
    ProxyPass /mirror/ghq/i !
    ProxyPass /mirror/ghq http://ghq.com
    将会代理除对/mirror/ghq/i请求之外的所有对 ghq.com 的/mirror/ghq请求。

    ProxyPassReverse 指令调整由反向代理服务器发送的HTTP回应头中的URL。此指令使 Apache 调整HTTP重定向回应中Location,Content-Location和URI头里的URL。这就是Apache在作为逆(反)向代理使用时,避免以因为位于反向代理之后的后端服务器的HTTP重定向造成的绕过反向代理的实质。

    路径是本地虚拟路径的名称,url远端服务器的部分URL,与ProxyPass指令中的使用方法相同。例如:
    假定本地服务器Web地址为http://study.com/,那么下面两句实现逆(反)代理功能:
    ProxyPass /mirror/ghq/ http://ghq.com/
    ProxyPassReverse /mirror/ghq/ http://ghq.com/

    简要说明:我们不仅会把所有对<http://study.com/mirror/ghq/bar>的请求直接转为对 <http://ghq.com/bar> 的代理请求(由ProxyPass提供的功能)。它还会改变服务器ghq.com的发送:当http://ghq.com/bar被它重定向到http://ghq.com/quux时,Apache会在前转HTTP重定向回应到客户端之前调整它为http://study.com/mirror/ghq/quux

    目前新版本的Apache v 1.3.x的mod_proxy的缓冲功能已经从mod_proxy中移除并入了一个新模块--mod_cache。Apache 2.0.x的Proxy不再支持缓冲了,所有的缓冲功能已经移入了mod_cache;mod_cache现在已经能支持任何内容的缓冲了,而不仅是通过代理的内容。

0
相关文章