Redhat AS 5.5 x86_64
apache 2.2.3
weblogic 10.3.5
curl
网络:
/weblogic_20.103:7070
apache_10.103---
\weblogic_20.103:7070
三种反向代理方式:
1、无负载均衡1vs1
2、有负载均衡之mod_proxy_balace(保持回话、不保持会话)
3、有负载均衡之mod_wl_22
----------------------------------------------------------------
分头介绍如下:(/etc/httpd/conf/httpd.conf)
1、无负载均衡1vs1,是最简单的一种,大概像这样就可以了
Listen 7001
ProxyRequests Off
Order deny,allow
Allow from all
ProxyPass / http://ap_ip1:port/
ProxyPassReverse / http://ap_ip1:port/
2、有负载均衡之mod_proxy_balace分为保持回话和不保持会话,应用场景是这样的,如果weblogic做了集群,也就是有了session同步,那么就不用保持会话了;否则就必须得用会话保持了。
2.1不保持会话,配置大约是这样的
Listen 7001
ProxyRequests Off
Order deny,allow
Allow from all
BalancerMember http://ap_ip1:port/
BalancerMember http://ap_ip2:port/
ProxyPass / balancer://weblogic/ nofailover=On
ProxyPassReverse / balancer://weblogic/
2.2保持会话之tomcat,配置大约是这样的
(作者的话:本例需在tomcat的server.xml中添加jvmroute=server1的配置,lbmethod之类的就不说了)
(http://nat.guyton.net/2009/07/08/apache-load-balancer-persistence/)
Listen 7001
ProxyRequests Off
Order deny,allow
Allow from all
BalancerMember http://ap_ip1:port/ route=server1
BalancerMember http://ap_ip2:port/ route=server2
ProxyPass / balancer://weblogic/ stickysession=JSESSIONID nofailover=On
ProxyPassReverse / balancer://weblogic/
2.3保持会话之weblogic or others,配置大约是这样的
(作者的话:本例在本环境中没有成功,一直添加不成功cookie)
Listen 7001
#添加一个cookie用来区分server
Header add Set-Cookie "routeId=.%{BALANCER_WORKER_ROUTE}e;path=/" env=BALANCER_ROUTE_CHANGED
ProxyRequests Off
Order deny,allow
Allow from all
BalancerMember http://ap_ip1:port/ route=server1
BalancerMember http://ap_ip2:port/ route=server2
ProxyPass / balancer://weblogic/ stickysession=routeId nofailover=On
ProxyPassReverse / balancer://weblogic/
2.4解惑(为什么tomcat和weblogic的配置不一样呢?)
这个事网上大部分人的文章都不告诉你,你得琢磨的头疼,想去看看apache的手册,在这里我告诉你:
apache会话保持是根据cookie或者url的,(其实也就是session的实现),也就是stickysession。
如果你是Apache,一个session的cookie给你,你怎么知道他是哪个服务器生成的?你肯定不知道,我也不知道,但是通过改造server,在cookie上添加适当的标签就可以了,于是乎,tomcat就可以配置jvmrout=routeid,那么生成的session的cookie值后面就会append “.routeid”,注意前面哪个小点,可也。
tomcat和httpd都是apache组织的孩子,当然可以无缝对接,对于weblogic就悲剧了,人家可不允许你在session的cookie中添加什么后缀,因为weblogic其实有自己的后缀,一般是这个的:cookie!主serverid!副serverid。针对这个问题,Apache展现了自己强大的功能,你weblogic不给我区分session,我就在你返回的报文中添加一个cookie,这就是Header那句的功能了,来表示你的身份,以后我用这个cookie来区分是哪个服务器创建的报文,不用你的session了。
(http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html)
3有负载均衡之mod_wl_22
mod_wl_22是weblogic提供的,
#找到weblogic提供的apache模块
find / -name mod_wl_22.so
#复制到apache的modulus中
cp mod_wl_22.so /etc/httpd/modulus/
vi httpd.conf
LoadModule weblogic_module modules/mod_wl_22.so
WebLogicCluster ip1:port1,ip2:port2
DynamicServerList off
MatchExpression *.jsp
MatchExpression *.*
MatchExpression *
经过测试,这是支持会话保持的。
4提一下curl
curl是一个linux的http类库,也是一个文本模式下的功能强大的http客户端
#把cookie保持到cookie中,把header保持到cookie.d中
curl -c cookie -D cookie.d http://ip:port/modu/test.jsp
#使用cookie
curl -b cookie http://ip:port/modu/test.jsp