通过mod_jk实现apache与tomcat整合

本文主要描述如何通过mod_jk作为代理工具将apache的httpd与tomcat整合。

实现httpd到tomcat的反向代理的方法有两种,一种是利用mod_proxy,添加virtual host字段,另一种就是运用mod_jk,本文主要探讨通过mod_jk实现的反向代理。

mod_jk与proxy的差异

mod_proxy是运用http进行反向代理,mod_jk是通过ajp协议进行,http协议tcp只保持短时间连接要经常进行tcp三次握手四次挥手,ajp协议tcp保持长时间连接反向代理开销就比较小。

mod_jk安装

首先确认apache与tomcat都已经安装完成,然后进行mod_jk的安装。

yum install httpd-devel -y    #编译生成apache扩展依赖apxs,如未安装先安装
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
tar -zxf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/native/
./configure --with-apxs=/usr/sbin/apxs
make
cp ./apache-2.0/mod_jk.so /etc/httpd/modules/

最后一步是把编译好的mod_jk.so拷贝到自己httpd的modules目录下。

mod_jk配置

mod加载好之后,可以在httpd.conf里直接配置,也可以在其中Include其他的conf文件,这里我们就直接把配置添加在httpd.conf里。

LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkMount /examples/* tomcat1
    JkMount /servlet/* tomcat1
    JkMount /sample/*.jsp tomcat1
    JkMount /sample/* tomcat1
    JkMount /sample/hello/* tomcat1
    JkMount /sample/hello/.jsp tomcat1
    JkMount /*.jsp tomcat1
    JkMount /*.do tomcat1
</IfModule>

上面的字段表示,首先,我们要写一个workers.properties来指明worker的配置文件,JkLogLevel表示日志记录级别,可以选info,warn,debug。JkMount指明了哪些目录下的文件需要被哪个tomcat转发。也可以另写文件如uriworkermap.properties配置Mount。

之后我们要写workers.properties文件,用来配置不同的workers。

workers.tomcat_home=/usr/local/tomcat
worker.list=tomcat1
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009

最后在tomcat中配置jvmRoute,与workers.properties中指名的worker对应。

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