最近在弄服务器,刚开始只是装载了tomcat,通过域名配置,端口设置,通过主域名访问,完全没有问题,但是之后想将2级域名配置的灵活一些,想到用Apache来做。其实配置Apache和Tomcat非常简单,先要明白他俩之间的关系是关键:
apache:侧重于http server tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效 , 支持JSP,但对静态网页不太理想; apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。 换句话说,apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上。
这个比喻已经非常深刻和形象了,我想你该明白了。
--------------------------------------begin---------------------------------
下面我就将配置的步骤下下来:
准备工作:
1、 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
下载地址:http://apache.etoak.com//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
2、 apache-tomcat-6.0.20.zip(免安装版-绿色版)
下载地址:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip
3、 jdk1.6.0_18
下载地址:
如果只是应用的话,也可以选择安装JRE,因为JRE比较小:)
4 JK:mod_jk-apache-2.2.2.so
下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.18/mod_jk-apache-2.2.2.so
注意JK的版本一定要与Apache版本相同。如果你的版本与我的不同,可以去官网下载,有多种版本,适用于各种操作系统,下载适用的既可
开始安装:
- 安装JDK:安装JDK和配置环境变量,我就不在这多啰嗦了,一开始拿到机器你就应该安装好了吧。
- 安装Apache:安装之前,你先要查看一下本机器中的端口情况,如果有占用80端口的进程,需要关了,因为Apache要安装在80端口上,默认访问,除非你设置到别的端口。安装好之后,apache会自动启动,然后你访问:http://localhost,就可以访问到apache,页面:It works!
- 安装Tomcat:其实你可以用绿色版的,不需要特别安装,关机是配置,最好目录放在Apache下:比如我的Apache的目录是:E:\Apache\Apache2.2;而tomcat的位置是:E:\Apache\tomcat\1-apache-tomcat-6.0.35;E:\Apache\tomcat\2-apache-tomcat-6.0.35;这两个tomcat。
- 配置过程:
- 修改httpd.conf
我的Apache安装在E:\Apache\Apache2.2,找到conf目录下的httpd.conf,在文件的最后一行添加
include "E:\Apache\Apache2.2\conf\mod_jk.conf"
-
新建mod_jk.conf文件,内容如下:
-
LoadModule jk_module modules/mod_jk-apache-2.2.2.so JkWorkersFile conf/workers.properties #指定那些请求交给tomcat处理,"controller"为在workers.properties里指定的负载分配控制器名 JkMount /*.jsp controller
-
- 将下载的JK插件mod_jk-apache-2.2.2.so复制到Apache安装目录的modules目录下。
- 新建并编辑workers.properties文件,内容如下:
#server worker.list = controller #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #========tomcat2======== worker.tomcat2.port=8010 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=false worker.controller.sticky_session_force=1 #worker.controller.sticky_session=1
- 这里可以配置任意多个Tomcat,2个本地,还可以配置远程的:
#========tomcat3======== worker.tomcat3.port=13009 worker.tomcat3.host=192.168.0.80 worker.tomcat3.type=ajp13 worker.tomcat3.lbfactor = 1
远程的这个我没有试,应该是可以的。
- 修改httpd.conf
配置Tomcat
- 要注意的是:tomcat只是8080端口要改,因为是两个tomcat,他们的8009端口,还有8005端口需要有区别,第一个是8009,第二个就是8010,下面就3、4就是具体说明:
-
AJP13的connector的poat和jvmRoute名称和workers.properties中配置对应。
-
由于截图面积有限,还需要保证本地2个本地Tomcat配置server的port,connector为http1.1的port都不相同。
测试
建立测试项目
建立test项目,需要在项目的web.xml中添加<distributable/> 建立test2.jsp,内容如下(网上都用这个测试,我就省的麻烦了): <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 属性设置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("<b>Session 列表</b><br>"); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="test2.jsp" method="POST"> 名称:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>
这时候,别启动Apache和3个Tocmat服务器,这些Tomcat启动顺序随意,如果有问题,比如:Apache启动不起来,那你就用cmd来启动Apache。如:
E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 487 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not i
ncluded in the server configuration
这个是说:我487行的地址重写有问题:
RewriteEngine on 这个出错了
解决方案:在httpd.conf 中,也就是在该文件中查询:“rewrite_module”这个,发现这个:“#LoadModule rewrite_module modules/mod_rewrite.so”已经被注释了,将该注释去掉,打开地址重写的配置。
重新启动Apache:
E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 490 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
RewriteCond: bad flag delimiters
490行出现问题,那我把地址重写的代码放出来:
487 RewriteEngine on
488 RewriteCond %{HTTP_HOST} ^aaa.***.com [NC]
489 RewriteRule ^/$ http://aaa.***.com/action/garden [L]\
490 RewriteCond %{HTTP_HOST} ^www.***.com [NC]
491 RewriteRule ^/$ http://www.***.com/action/testyemian [L]
看发现“\这个符号不应该存在。
将这个去掉,重新启动。apache启动成功“http://localhost/”,访问到
It works!
然后启动两个Tomcat;可以先测试单独的Tomcat的启动情况,带上端口就可以访问了。如果访问成功,继续。下面图片说明一切,你懂得。
然后查看tomcat,两个tomcat中的值的变化:
两个不同的tomcat得到了Session复制。
以上的测试说明,集群中的session已经共享,每个集群对于同一访问均有相同的session,而且session中存储的变量也复制了。
目前,就可以了,还有更多的内容如:节点插拔测试,等等稍后继续。
我的这篇博客,是经过了自己亲手实现的,因此,如果你有什么问题,可以给我留言。
欢迎你的转载,请标明出处:http://blog.csdn.net/vipzyj/article/details/8783750