Apache中的mod_proxy模块应用

章稳
2023-12-01

Apache模块 mod_proxy手册:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_proxy.html

 

 

首先在apache(Unix平台最流行的WEB服务器平台)上启用mod_proxy模块,需要注意的是,如果在apache(Unix平台最流行的WEB服务器平台)-2.2上,则还需要加载名为mod_proxy_http的模块。因为2.2系列把代理功能都拆分成N个小模块了。

#a2enmod proxy
#a2enmod proxy_http
#a2enmod proxy_balancer

 

 

 

apache(Unix平台最流行的WEB服务器平台)提供了mod_proxy模块用于提供代理服务,能够支持的包括正向代理、反向代理、透明代理、缓存、负载均衡,HTTP代理、FTP代理、SSL代理等若干强大的功能。

 

在您没有对服务器采取安全措施之前,请不要用ProxyRequests启用代理。

 

Apache可以被配置为正向(forward)反向(reverse) 代理。

正向代理 是一个位于客户端和原始服务器(origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache 提供)减少网络使用率。

使用ProxyRequests 指令即可激活正向代理 。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施 以确保仅为经过授权的客户端提供服务。

反向代理 正 好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通 请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

反 向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲 服务。 另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

可以使用ProxyPass 指令激活反向代理(在RewriteRule 指令中使用[P] 标记也可以)。配置反向代理并不需要 打开ProxyRequests 指令。

 

 

------------------------反向代理

反向代理可以基于一整个站点,也可以基于一个目录。首先在全局配置文件下,加入如下几行,打开反向代理。 proxy.conf

ProxyRequests Off // 使用ProxyRequests 指令即可激活正向代理
<Proxy your_apache(Unix平台最流行的WEB服务器平台)_server_ip:80>
Order deny,allow
Allow from all
</Proxy>


然后新建一个网站,即创建一个标准的<virtualhost>配置段。这里我们将站点/test目录设置为google的反向代理。加入下边内容:

ProxyPass /images/ !
ProxyPass /js/ !
ProxyPass /css/ !

ProxyPass / http://192.168.1.101/
ProxyPass /test1 http://192.168.1.102/
ProxyPass /test http://www.google.com/
ProxyPassReverse /test http://www.google.com/

ProxyPass易理解,就是转发url上的请求. 其中的配置顺序也是需要遵守 。要禁止转发的url需要放在一般的请求之前。对于http://***/images/  http://***/js/ http://***/css/的请求是不予转发的,对于http://***/test1/的请求,会转发到  http://192.168.1.102/ 。ProxyPassReverse就是反向代理

 

然后保存配置文件重新启动apache

 

通过反向代理,我们可以将web服务器放置在防火墙后,在web服务器前端使用mod_proxy配置反向代理,并打开apache(Unix平台最流行的WEB服务器平台)的mod_cache缓存模块,更可以极大的提高对静态内容的访问性能。

 

--------------理解反向代理:
<IfModule mod_proxy.c>
        ProxyRequests Off
        <Proxy localhost:80>
                #AddDefaultCharset off
                Order deny,allow
                Deny from all
                #Allow from .example.com
        </Proxy>
        ProxyPass /it http://192.168.1.117/2222
</IfModule>
访问http://192.168.1.102/it/a==>直接跳转http://192.168.1.117/2222/a/



<IfModule mod_proxy.c>
        ProxyRequests Off
        <Proxy localhost:80>
               # AddDefaultCharset off
                Order deny,allow
                Deny from all
                #Allow from .example.com
        </Proxy>
        ProxyPass /it http://192.168.1.117/2222
        ProxyPassReverse /it http://192.168.1.117/2222
</IfModule>
访问http://192.168.1.102/it/a==>http://192.168.1.102/it/a/

 

------------------------负载均衡

apache自带mod_proxy功能模块中目前可以实现两种不同的负载均衡集群实现方式,第一种是分工合作的的形式,通过各台主机负责不同的任务而实现任务分工。第二种是不同的机器在担任同样的任务,某台机器出现故障主机可以自动检测到将不会影响到客户端 ,而第一种却不能实现,但第一种实现方式的优点在于他是主服务器负担相应没第二种大,因为他只是提供跳转指路功能,形象的说他不给你带路只是告诉你有条路可以到,但到了那是否可以看到你见的人他已经不会去管你了 :)。相比之下第二种性能要比第一种会好很多 ;但他们都有个共同点都是一托N形式 来完成任务的所以你的主机性能一定要好o

 

 

 

下面以在apachemod_proxy下做的反向代理负载均衡为配置实例:
首先要确定域名www.test.com 在DNS上的记录对应apache服务器接口上具有internet合法注册的IP地址,这样才能使internet上对www.test.com 的所有连接请求发送给本台apache服务器。
在本台服务器的apache配置文件httpd.conf中添加如下设置:
proxypass     /news      http://192.168.1.117
proxypass     /it      http://192.168.1.103
注意,此项设置最好添加在httpd.conf文件“Section 2”以后的位置,服务器192.168.1.1-3也应是具有相应功能的www服务器,在重启服务时,最好用apachectl configtest命令检查一下配置是否有误

接下来也是我真正想要介绍的2.2版本后在mod_proxy中新添加的mod_proxy_balancer模块给我们带来的新功能。

首先将在主配置文件http.conf以下Module的注释去掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

再并增加以下元素
ProxyRequests Off
ProxyPass /test  balancer://xuanfei stickysession=jsessionid nofailover=On
<proxy balancer://xuanfei/>
    BalancerMemberhttp://192.168.1.117 loadfactor=1
    BalancerMemberhttp://192.168.1.103  loadfactor=1
</proxy>
ProxyPass为代理转发的Url,即将所有访问/test的请求转发到群集balancer://xuanfei
loadfactor为各主机间的负载比例参数,可是设置不同指数
BalancerMember为群集的成员,即群集服务器A或B,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember。

 

 

 

---------如何查看apache 集群的运行状态

先加载info模块:

#a2enmod info

 

<IfModule mod_status.c>

<Location /s-server-status>
    SetHandler server-status
    Order deny,allow
  #  Deny from all
    Allow from 192.168.1.117
# ip6-localhost
#    Allow from .example.com
</Location>

<Location /server-info>
SetHandler server-info
Order Deny,Allow
#Deny from all
Allow from 192.168.1.117
</Location>

<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
#Deny from all
Allow from 192.168.1.117
</Location>

ExtendedStatus On
</IfModule>



配置完成后重启APACHE可以通过
http://ip/server-staus
http://ip/server-info                    需要加载info.so
http://ip/balancer-manager
这些URL查看apache 集群的运行状态

 

 

 

 

 类似资料: