实战linux下配置apache与tomcat的JK整合,千辛万苦

写在前面:配这个apache和tomcat的整合,折腾了我半天,因为网络上的教程版本各异、平台不同,很是误导人,所以下面的文字是结合网上查询和自己实践所得,在我试验失败的内容,用红字标识,成功运行的内容,用绿字标识。

自从安装了DSL linux配置了网络后,就一直蠢蠢欲动,心想,要是不配一把服务器环境就浪费了。于是说干就干。

本来想配置apache+weblogic的,但是我的虚拟机硬盘只分了2G,有点吃紧,于是改配apache+tomcat。

先去网上google了一番,找到了mod_jk-1.2.26-httpd-2.2.6.so这个文件,发现先前编译的apache是2.2.10版本的,郁闷,只好找了apache 2.2.6 的代码来编译。编译完毕之后,修改了一下conf下的httpd.conf,吧ServerName和ServerAdmin改成自己的信息,然后就添加了jk所需的配置内容:

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.6.so

JkWorkersFile conf/workers.properties

JkOptions +ForwardKeySize -ForwardDirectories

JkRequestLogFormat “%w %V %T”

JkMount //servlet/ ajp13

JkMount /*.jsp ajp13

JkLogLevel error

其中workers.properties是这样的:(tomcat和jdk路径和平台有关)

workers.tomcat_home=”/usr/local/apache-tomcat-6.0.18”

workers.java_home=”/usr/share/java/jdk1.6.0_10”

ps=\

wk.list=ajp13

wk.ajp13.port=8080

#wk.ajp13.host=localhost

wk.ajp13.host=192.168.1.102

wk.ajp13.type=ajp13

wk.ajp13.lbfactor=50

wk.ajp13.cachesize=10

wk.ajp13.cache_timeout=600

wk.ajp13.socket_keepalive=1

wk.ajp13.socket_timeout=300

并把mod_jk-1.2.26-httpd-2.2.6.so和workers.properties拷贝到apache的modules目录里

然后在httpd.conf里配了一下虚拟主机:

NameVirtualHost 192.168.1.102

<VirtualHost 192.168.1.102>

DocumentRoot “/usr/local/apache2/htdocs”

ServerName 192.168.1.102

DirectoryIndex index.htm index.html

<Directory /usr/local/apache2/htdocs >

Options -Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

并且在tomcat的conf目录下server.xml文件<Engine..></Engine>也增加了对应虚拟主机的host:

<Host name=”192.168.1.102” debug=”0” appBase=”/usr/local/apache2/htdocs” unpackWARs=”true” autoDeploy=”true”>

<alias>192.168.1.102</alias>

<Context path=”” docBase=”/usr/local/apache2/htdocs” debug=”0” reloadable=”true”/>

</Host>

然后启动tomcat和apache,结果访问了一个试验的jsp,竟然直接输出源码了……很显然,apache直接访问了该页面,没有把请求交给tomcat来处理。

又是一番疯狂google,国内国外看了不少文章,终于发现原来tomcat已经可以自动生成jk的配置文件,只需增加一个监听器即可:

在server.xml里<Engine..></Engine>块中增加一行:

<Listener className=”org.apache.jk.config.ApacheConfig” modJk=”/usr/local/apache2/modules/mod_jk-1.2.26-httpd-2.2.6.so” />

然后启动tomcat,其conf目录就会多出jk和auto两个目录,其中auto目录中有一个叫做mod_jk.conf的文件,正是我们想要的,只要在apache的配置文件引用一下这个文件即可,这样,无论tomcat中部署的项目怎么变化,都会自动的生成mod_jk.conf,相当方便:修改httpd.conf,最后加上:

Include /usr/local/apache-tomcat-6.0.18/conf/auto/mod_jk.conf

然后再重新启动tomcat和apache,整合终于成功了。但是现在还有瑕疵,所有请求都被转发到了tomcat,如何让apache处理非jsp的东西呢?这就得慢慢调试了(不过,如果有url重写怎么办?像是*.htm的实际上对应的是xxx.jsp,貌似还是交给tomcat的好,给apache处理图片吧……)

总结一下:

实际上的操作,就按照绿色文字修改相应配置文件即可,注意我的目录可能和你的目录不同哦~

加载评论框需要翻墙