APACHE整合TOMCAT的三种方式

 

整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。

首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序,你也可以将该端口改为 80。

既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢?原因有下面几个:

1. 提升对静态文件的处理性能

2. 利用 Web 服务器来做负载均衡以及容错

3. 无缝的升级应用程序

这三点对一个 web 网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个 Tomcat 宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server 了,它跟 tomcat 的结合是最紧密和可靠的。

 

通常都是通过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实例列表

worker.list=tomcata,tomcatb

#tomcata实例配置

worker.tomcata.host=127.0.0.1

worker.tomcata.port=8009

worker.tomcata.type=ajp13

#tomcatb实例配置

worker.tomcatb.host=127.0.0.1

worker.tomcatb.port=9009

worker.tomcatb.type=ajp13

编辑apache配置文件httpd.conf,在文件末尾加上以下内容:

#以下为tomcat集成配置部分

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

 

#a.hackang.cn虚拟站点

<VirtualHost *:80>

ServerName a.hackang.cn

JkMount /*.* tomcata

JkMount /* tomcata

DirectoryIndex index.jsp

</VirtualHost>

#b.hackang.cn虚拟站点

<VirtualHost *:80>

ServerName b.hackang.cn

JkMount /*.* tomcatb

DirectoryIndex index.jsp

</VirtualHost>

下面是Tomcat的配置,很重要。

tomcata可以使用默认配置,如果想访问 a.hackang.cn直接显示某应用的首页,可在tomcata的配置文件server.xml里面的host节点间加上

<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true"

charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" displayName="a.hackang.cn" docBase="E:/myweb/a"

       mapperClass="org.apache.catalina.core.StandardContextMapper" path=""  privileged="false" reloadable="false" swallowOutput="false" useNaming="true"

       wrapperClass="org.apache.catalina.core.StandardWrapper">

</Context>

docBase指向的你应用所在的文件夹,不能将此应用部署到tomcata的webapps文件夹中。否则就有两个应用了,一个是根访问路径,一个是根访问路径+应用名了。

tomcatb的配置要稍加修改,修改 conf/server.xml文件

<Server port="8005" shutdown="SHUTDOWN">将此处的端口号改掉,不能与tomcata的相同,比如可以改成 9005

修改默认的8080端口为9090,修改后如下:

<Connector port="9090" maxHttpHeaderSize="8192"

             maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

             enableLookups="false" redirectPort="8443" acceptCount="100"

             connectionTimeout="20000" disableUploadTimeout="true" />

 

修改端口号为8009的Connector

修改前为:

<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

修改后:

<Connector port="9009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

此处的9009跟workers.properties文件中tomcatb的端口号是一致的。

如果也想访问 b.hackang.cn时直接显示应用b,配置方法同a,以上已经提及,只需将docBase="E:/myweb/a" 改成 docBase="E:/myweb/b"即可

最后编辑C:/WINDOWS/system32/drivers/etc/hosts文件,在最后加上两个映射

  127.0.0.1  a.hackang.cn

  127.0.0.1  b.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

#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

把这两行前面的#去掉即可

然后在末尾加上

<VirtualHost *:80>

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>

搞定!!!方便吧

 


 

 

第三种方式

第三种方式其实跟第二种差不多,只不过用的是http端口

<VirtualHost *:80>

ProxyPass / http://127.0.0.1:8080/

ProxyPassReverse / http://127.0.0.1:8080/

ServerName a.hackang.cn

</VirtualHost>

<VirtualHost *:80>

ProxyPass / http://127.0.0.1:9090/

ProxyPassReverse / http://127.0.0.1:9090/

ServerName b.hackang.cn

</VirtualHost>

此处的9090跟tomcatb中配置的http端口一致

 

到此Apache整合Tomcat全部结束,若要加强tomcat处理静态资源的能力,可以启用APR服务

 

采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so, 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载 mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 则需要加载 mod_proxy.so 和 mod_proxy_ajp.so这两个模块。

 

 

相对于 JK 的连接方式,后两种在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验,毕竟 Apache 2.2.3 推出的时间并不长,采用这种连接方式的网站还不多,因此,如果是应用于关键的互联网网站,还是建议采用 JK 的连接方式。

 


  下面是我自己用的配置,采用的就是第一种方式jk集成

将mod_jk-1.2.26-httpd-2.2.4.so 放到Apache安装目录的modules文件夹下。

在Apache安装目录的conf文件夹创建workers.properties配置文件,内容如下:

 

workers.tomcat_home=D:/Program Files/Tomcat 5.5  #让mod_jk模块知道Tomcat   
workers.java_home=C:/Program Files/Java/jdk1.5.0_05 #让mod_jk模块知道j2sdk   

ps=/   
worker.list=ajp13  #模块版本,现有ajp14了,不要修改   
worker.ajp13.port=8009  #工作端口,若没占用则不用修改   
worker.ajp13.host=localhost  #本机,若上面的Apache主机不为localhost,作相应修改   
worker.ajp13.type=ajp13  #类型   
worker.ajp13.lbfactor=1  #代理数,不用修改   

 

 修改httpd.conf,内容示下:

 

LoadModule   jk_module   modules/mod_jk.so
DocumentRoot "E:/website/Tomcat 5.5/webapps/ROOT"

<IfModule   jk_module>
JkWorkersFile   "D:/Program Files/Apache2.2/conf/workers.properties"
JkAutoAlias   "E:/website/Tomcat 5.5/webapps/ROOT"
JkMount /servlet/* ajp13#下面这些都是交给tomcat管理
JkMount /*.jsp ajp13
JkMount /*.do ajp13
</IfModule>

 

#下面这些配置源文件中已存在,只需根据自己情况作相应修改
<Directory>
 Options Indexes MultiViews    
 AddOutputFilter Includes html   
 AllowOverride None    
 Order allow,deny    
 Allow from all 

#默认会是deny from all,有时访问会出现You don't have permission to access / on this server.    
</Directory>  
Listen localhost:81
ServerName localhost:81 #IP:端口
ServerAdmin kongdebing86@hotmail.com

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.jsp default.html default.htm default.jsp#没有index.html它会去找index.jsp
</IfModule>

 

ok,到此apache配置完成
 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值