螺 丝 钉 阅读(52) 评论(0)

Apache 反向代理、负载均衡

准备工作

1、  2 个tomcat实例

2、  安装Apache server2.2

 

 

基于apache server配置反向代理

在这个配置中,只使用到了apache server,没有使用到tomcat。

 

1)  ${apacheserver}/conf/extra/httpd-vhosts.conf在配置一个使用反向代理的虚拟主机

 

<VirtualHost *:80> 

       ServerAdmin test@test.com 

       ServerName www.test.com 

       ProxyRequests Off 

       <Proxy *> 

           Order deny,allow 

           Allow from all 

       </Proxy> 

       ProxyPass /test http://192.168.1.250:8080/test 

       ProxyPassReverse /test http://192.168.1.250:8080/test 

</VirtualHost> 

这里是在apache中配置了一个虚拟主机。

端口是80

ServerAdmin:是邮箱地址

ServerName:是hosts文件中配置的域名

ProxyPass /test http://192.168.1.250:8080/test  是表示访问http://www.test.com/test 下的资源时,都使用配置的这个Prxoy。

 

2)在${apacheserver}/conf/httpd.conf 文件中做如下配置

   LoadModule proxy_module modules/mod_proxy.so和

   LoadModule proxy_http_module modules/mod_proxy_http.so前的注释去掉

目的是让apache启动时加载proxy相关模块

 

把Include conf/extra/httpd-vhosts.conf前页的注释去掉

目的是,让apache启动时加载虚拟主机配置

 

 

 

 

基于apache server + tomcat 配置反向代理和负载均衡

 

1、配置2个tomcat实例

1)调整它们的端口(shutdown,http或者ajp)

2)指定route

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">

两个tomcat实例,一个是worker1,一个是worker2。后面配置apache时要用到。

 

2、Apache上配置Proxy

1) 加载相关代理模块

既然要使用代理方式访问,肯定要有代理模块才行的。

在${apacheserver}/config/http.conf中做如下配置:

 

启用proxy的命令是:

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

 

 

如果要配置AJP协议,也要mod_proxy_ajp.so前面的#去掉。

 

2)定义反向代理和负载均衡

 

 

配置的源码是:

<IfModule proxy_balancer_module>

         # define a Load Balance Proxy based HTTP protocol

         <IfModule proxy_http_module>

                   <Proxy balancer://myHttpLB>

                            BalancerMember http://localhost:18080/examples loadfactor=80 route=worker1

                            BalancerMember http://localhost:28080/examples loadfactor=20 route=worker2

                   </Proxy>

 

                   ProxyRequests off

                   ProxyPass /examples balancer://myHttpLB/ stickySession=JSESSIONID nofailover=Off

                   ProxyPassReverse /examples balancer://myHttpLB/

         </IfModule>

        

         # define a Load Balance Proxy based AJP protocol

         <IfModule proxy_ajp_module>

                   <Proxy balancer://myAjpLB>

                            BalancerMember ajp://localhost:18080/examples loadfactor=80 route=worker1

                            BalancerMember ajp://localhost:28080/examples loadfactor=20 route=worker2

                   </Proxy>

 

                   ProxyRequests off

                   ProxyPass /examples balancer://myAjpLB/ stickySession=JSESSIONID nofailover=Off

                   ProxyPassReverse /examples balancer://myAjpLB/

         </IfModule>

</IfModule>

 

 

 

上面的配置中,根据加载的模块启动了两个具有负载均衡功能的反向Proxy,一个是基于HTTP协议的,一个 是基于AJP协议的。下面对HTTP协议的做一个说明:

 

<Proxy balancer://myHttpLB>

         BalancerMember http://localhost:18080/examples loadfactor=80 route=worker1

         BalancerMember http://localhost:28080/examples loadfactor=20 route=worker2

</Proxy>

 

定义一个Proxy,这个Proxy启用了负载均衡,名称是balancer://myHttpLB

有两个成员:worker1和worker2。权重分别为80、20。

 

ProxyPass /examples balancer://myHttpLB/ stickySession=JSESSIONID nofailover=Off

这个配置表示:

在访问http://apacheServerIp:port/examples 下的资源时,由交给负载均衡balancer://myHttpLB/ 来处理。

stickySession 表示启用粘性会话。

Nofailover用于配置故障转移的。

 

ProxyPassReverse /examples balancer://myAjpLB/

用于调整由反向代理服务器发送的HTTP回应头中的URL

 

如果对ProxyPass配置中还有不理解的地方,可以参考

http://blog.chinaunix.net/uid-13328647-id-2902236.html

 

测试

访问http://localhost/examples。

examples是tomcat/webapps下的应用,所以肯定是可以访问到的。