最近做的一个项目可能需要用Aapche实现访问请求分流提高访问性能。因此自己研究了一下。现在把我自己配置成功的过程分享一下。
首先要下载Apache.
建议从官网下载http://httpd.apache.org/download.cgi
我安装的是最新的版本2.4.25。
安装方法参照http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html
之前在网上找到的配置方法一般是需要安装mod_jk,配置worker.properties的,这种方法是早期的apache的配置方式。现在的2.4.25已经集成了mod_jk,不需要安装mod_jk配置worker.properties了,简单了很多。
<display-name>TomcatClusterDemodisplay-name>
<distributable/>
把项目放到到tomcat1、tomcat2的webapps目录下。
我的目标是要用两个tomcat(tomcat1,tomcat2)来进行分流,这两个Tomcat的端口、AJP等配置要不一样。
tomcat1的server.xml:
<Server port="10005" shutdown="SHUTDOWN">
<Connector port="10001" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="20001" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
tomcat2的server.xml
<Server port="10006" shutdown="SHUTDOWN">
<Connector port="10002" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="20002" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
去掉 Include conf/extra/httpd-vhosts.conf前面的注释#,
在httpd.conf文档最下面加上以下代码:
ProxyRequests Off
BalancerMember ajp://172.16.X.X:20001/ loadfactor=1 route=jvm1
BalancerMember ajp://172.16.X.X:20002/ loadfactor=1 route=jvm2
这里的配置是跟tomcat的server.xml配置对应的。172.16.X.X是tomcat服务器的IP,端口号对应tomcat中server.xml里的ajp的端口号,route对应jvmRoute的配置。
3.用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上以下代码:
ServerName 172.16.X.X
ServerAlias localhost
ProxyPass / balancer://mycluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://mycluster/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
到这里配置就基本上完成了。
然后写个测试页面test.jsp放到两个tomcat的项目里测试:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html><head><title>Cluster App Testtitle>head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%>
<%
out.println("
ID " + session.getId()+"
");
// 如果有新的 Session 属性设置
System.out.println( "=========test==========");
%>
table>
form>
body>
html>
重启apache,tomcat1,tomcat2,
在浏览器输入http://172.16.X.X/test.jsp ,然后多刷新几次。
参考文章:
http://www.cnblogs.com/qqzy168/archive/2013/08/03/3199237.html
http://bbs.it-home.org/thread-40372-1-1.html
http://googolflex.com/?p=492