通常都是通过JK_MOD来整合Apache和Tomcat,但是Apache2.2版本以上整合Tomcat可以直接通过AJP_PROXY来完成,很方便。下面把几种方式都简单讲讲。 假设一个Apache,两个Tomcat容器,访问 a.hackang.cn 和 b.hackang.cn 分别对应 tomcata 和 tomcatb 的应用 第一种方式:JK_PROXY 安装好Apache和Tomcat,下载mod_jk-1.2.26-httpd-2.2.4.so (2.2.4对应着Apache版本) 将mod_jk-1.2.26-httpd-2.2.4.so 放到Apache安装目录的modules文件夹下。 在Apache安装目录的conf文件夹创建workers.properties配置文件,内容如下: #下面是Tomcat实例列表 #tomcata实例配置 #tomcatb实例配置 编辑apache配置文件httpd.conf,在文件末尾加上以下内容: #以下为tomcat集成配置部分 #a.hackang.cn虚拟站点 #b.hackang.cn虚拟站点 下面是Tomcat的配置,很重要。 tomcata可以使用默认配置,如果想访问 a.hackang.cn直接显示某应用的首页,可在tomcata的配置文件server.xml里面的host节点间加上 <Context className=\"org.apache.catalina.core.StandardContext\" cachingAllowed=\"true\" docBase指向的你应用所在的文件夹,不能将此应用部署到tomcata的webapps文件夹中。否则就有两个应用了,一个是根访问路径,一个是根访问路径+应用名了。 tomcatb的配置要稍加修改,修改 conf/server.xml文件 <Server port=\"8005\" shutdown=\"SHUTDOWN\">将此处的端口号改掉,不能与tomcata的相同,比如可以改成 9005 修改默认的8080端口为9090,修改后如下: <Connector port=\"9090\" maxHttpHeaderSize=\"8192\" 修改端口号为8009的Connector 此处的9009跟workers.properties文件中tomcatb的端口号是一致的。 如果也想访问 b.hackang.cn时直接显示应用b,配置方法同a,以上已经提及,只需将docBase=\"E:myweba\" 改成docBase=\"E:mywebb\"即可 最后编辑C:WINDOWSsystem32driversetchosts文件,在最后加上两个映射 127.0.0.1 a.hackang.cn 至此,配置就结束了,可以用Apache的Test Configuration命令测试一下配置文件,如果没有问题,启动Apache,再分别启动两个Tomcat就ok了 第二种方式配置: ajp apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp,很方便。 修改apache配置文件httpd.conf 启用mod_proxy_ajp #LoadModule proxy_module modules/mod_proxy.so 把这两行前面的#去掉即可 然后在末尾加上 <VirtualHost *:80>
worker.list=tomcata,tomcatb
worker.tomcata.host=127.0.0.1
worker.tomcata.port=8009
worker.tomcata.type=ajp13
worker.tomcatb.host=127.0.0.1
worker.tomcatb.port=9009
worker.tomcatb.type=ajp13
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
#如果机器有多个IP地址请务必使用*号
NameVirtualHost *:80
<VirtualHost *:80>
ServerName a.hackang.cn
JkMount /*.* tomcata
JkMount /* tomcata
DirectoryIndex index.jsp
</VirtualHost>
<VirtualHost *:80>
ServerName b.hackang.cn
JkMount /*.* tomcatb
DirectoryIndex index.jsp
</VirtualHost>
charsetMapperClass=\"org.apache.catalina.util.CharsetMapper\" cookies=\"true\" crossContext=\"false\" debug=\"0\" displayName=\"a.hackang.cn\" docBase=\"E:myweba\"
mapperClass=\"org.apache.catalina.core.StandardContextMapper\" path=\"\" privileged=\"false\" reloadable=\"false\" swallowOutput=\"false\" useNaming=\"true\"
wrapperClass=\"org.apache.catalina.core.StandardWrapper\">
</Context>
maxThreads=\"150\" minSpareThreads=\"25\" maxSpareThreads=\"75\"
enableLookups=\"false\" redirectPort=\"8443\" acceptCount=\"100\"
connectionTimeout=\"20000\" disableUploadTimeout=\"true\" />
修改前为:
<Connector port=\"8009\" enableLookups=\"false\" redirectPort=\"8443\" protocol=\"AJP/1.3\" />
修改后:
<Connector port=\"9009\" enableLookups=\"false\" redirectPort=\"8443\" protocol=\"AJP/1.3\" />
b.hackang.cn
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
ServerName a.hackang.cn
</VirtualHost>
<VirtualHost *:80>
ProxyPass / ajp://127.0.0.1:9009/
ProxyPassReverse / ajp://127.0.0.1:9009/
ServerName b.hackang.cn
</VirtualHost>