/ 中存储网

Apache+Tomcat项目部署过程记录

2013-11-06 13:57:01 来源:IT技术网

客户请求通过Apache过滤转发到tomcat服务器,对于一些静态页面的请求,包括请求的Html文件,静态页面或者动态页面中的图片都直接由Apache处理,采用另外一种说法就是,对于用户发出的对动态页面的请求,如jsp、servlet,由Apache转发给Tomcat处理,可以有效提高服务器性能。下面记录配置过程。

环境配置:JDK1.4、Tomcat5.0.28、Apache2.0.58、mod_jk-apache-2.0.59.so(下载地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.25/)

Tomcat配置:

在conf/server.xml中有

<Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3"/>,通过8009端口接收AJP13请求

增加一个配置文件,命名为worker.properties。内容如下

workers.tomcat_home=D:/developEnv/server/Tomcat528

workers.java_home=D:/developEnv/JDK/j2sdk1.4.2_05

ps=/

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp13

worker.ajp13.lbfactor=1

看key能明白每行配置的具体意思。这里的ajp13.port的值和上面server.xml中的Connector Port值一致,host根据实际情况,Apache所在机器地址

对于部署在Tomcat上的应用不需要任何变动,不论是直接将war放置在webapp里面,还是将应用的配置文件放在在conf/catalina/localhost/里面。至此Tomcat配置完毕。

Apache的配置:

修改Apache的httpd.xml文件

首先需要确认两个参数,Listen是指Apache的监听端口,不能和现已使用的端口冲突,否则Apache启动失败,在设置过程中,如果出现Apache启动失败的情况时,可以将同目录下的httpd.default.conf文件内容覆盖过来,这里存放的是Apache的默认配置。

另外一个参数是DocumentRoot,这是你的应用放置的起始位置,后面对于想通过Apache转发到Tomcat的应用,其静态内容的存放位置都是相对于该目录的。

在httpd.xml的最后增加如下内容

#加载mod_jk模块

LoadModule jk_module modules/mod_jk.so

#指向之前生成的Tomcat中conf目录下的workers.properties文件绝对路径

JkWorkersFile "D:/developEnv/server/Tomcat528/conf/workers.properties"

#模块工作日志存放文件

JKLogFile "d:/tmp/jkLog.log"

#日志记录级别,debug为最低级别,使用该级别时,系统日志量非常大,可以采用info、error

JKLogLevel error

ServerAdmin [email protected]

ServerName localhost

DirectoryIndex index.html index.htm index.jsp

#设置转发的请求url,这里设置对于jsp请求或者servlet请求都通过jkModule转发给Tomcat,如果设置JKMount /* Apache将不做任何工作,完全由Tomcat接替Apache,这样就没有整合的意义了,只是起到请求转发的功能,所有的客户请求还是交由Tomcat处理

JKMount /servlet/* ajp13

JKMount /*.jsp ajp13

 可以使用 apache -t测试配置文件是否正确,如果错误会提示错误原因。

应用系统需要做一些相应的变动:

 1、将系统中的一些静态内容按照目录结构移动到apache 的DocumentRoot的相应应用文件夹中,只有那些

问题以及问题解决:

 1、问题:通过上面方法设置之后,可以通过Apache访问到JSP页面,测试表明静态内容是直接由Apache处理。但是访问server内容时,却不能解析,报404页面不能访问错。

解决:尽管JKMount /servlet/* ajp13已经设置了满足这种格式的请求由Tomcat处理,但是不能工作,目前的解决方法有2个,一个是重新银蛇server到一个url,并带上后缀,然后在JKMount中类似jsp那样设置,第二个方法是换用Apache2.2,Apache2.2已经支持Tomcat,采用Proxy方式。有知道解决访问虚拟目录访问请留言.

针对有多个应用的需求,设置虚拟主机

LoadModule jk_module modules/mod_jk.so

JkWorkersFile "D:/developEnv/server/Tomcat528/conf/workers.properties"    

<VirtualHost *:81>

JKLogFile "d:/tmp/jkLog.log"

JKLogLevel info

DocumentRoot d:/data/apache/www

ServerAdmin [email protected] 

ServerName hzCB

DirectoryIndex index.html index.htm index.jsp

JKMount /*.srv ajp13

JKMount /*.jsp ajp13

 </VirtualHost>

 <VirtualHost *:82>

ServerAdmin [email protected]

DocumentRoot d:/data/apache/www

ServerName hzPB

ErrorLog logs/pb.log

CustomLog logs/pbAccess.log common

</VirtualHost>

<VirtualHost *:83>

ServerAdmin [email protected]

DocumentRoot d:/data/apache/www

ServerName hzIM

ErrorLog logs/im.log

CustomLog logs/imAccess.log common

</VirtualHost>