您的位置:首页 > 理论基础 > 计算机网络

tomcat与apache http server集成

2014-09-12 15:43 579 查看


tomcat与apache http server的集成与负载均衡

因为看的资料比较老,所以搭建完环境后才发现jk插件已经不推荐使用,Apache 2.2自带了和tomcat集成的插件,目前jk插件已经停止更新(好像06年就停止更新了



tomcat是应用服务器,而apache是web服务器,虽然tomcat也可以处理html文件,但是处理的速度要比apache慢很多。当站点中包含大量的静态页面和小部分动态页面的时候,如果使用tomcat处理静态页面在性能上就显得不合适了。因此需要静态内容专门的交给IIS/Apache/Nignx等web服务器处理。

 

Nignx和Apache的简单比较

相对而言Apache安全性更好些,但同样的配置环境负载能力不如Nginx,(技术上可以解决)

Nignx相比Apache安全性差些,但同样的配置环境负载能力高于Apache。国内的大公司都在使用Nignx,因为大公司利用服务器群LAMP搭建的环境成本远大于Nignx,

比如1000000w的访问量需要10台LAMP环境服务器才能完成,但是Nignx可能只需要5、6台就够用了,这样对公司来说大大节约了成本。

 

    1、Tomcat与Http server集成原理

Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。

tomcat默认情况下在conf/server.xml配置了两种连接器:

<connector port="8080" protocol="HTTP/1.1" <="" p="">
connectionTimeout="20000"
redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

Web客户访问Tomcat服务器上JSP组件的两种方式如下图所示。



 

JK插件

Tomcat提供了专门的JK插件来负责Tomcat和HTTP服务器的通信。应该把JK插件安置在对方的HTTP服务器上。当HTTP服务器接收到客户请求时,它会通过JK插件来过滤URL,JK插件根据预先配置好的URL映射信息,决定是否要把客户请求转发给Tomcat服务器处理。

假定在预先配置好的URL映射信息中,所有“/*.jsp”形式的URL都由Tomcat服务器来处理,那么在图22-1的例子中,JK插件将把客户请求转发给Tomcat服务器,Tomcat服务器于是运行index.jsp,然后把响应结果传给HTTP服务器,HTTP服务器再把响应结果传给Web客户2。

 

AJP协议

AJP是为Tomcat与HTTP服务器之间通信而定制的协议,能提供较高的通信速度和效率。

 

    2、 Tomcat与Http server集成具体操作

软件准备

    tomcat6

    apache httpd 2.0

    jk插件(前两个软件都比较好下载,这个插件比较难下载,所以给出链接地址)

    http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

 

配置jk插件

把mod_jk.so放到Apache的modules目录下



在conf目录下新建workers.properties,在文件中加入以下内容

worker.list =controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8007 #ajp13 端口号,在tomcat下server.xml配置,默认8007
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1

相关属性含义



JkMount用来指定URL映射信息,“JkMount  /*.jsp  worker1”表示“/*.jsp”形式的URL都由worker1代表的Tomcat服务器来处理;“JkMount  /helloapp/*  worker1”表示访问helloapp应用的URL都由worker1来处理。

 

 

配置Apache
在conf/httpd.conf中加入
# 加载mod_jk
LoadModule jk_module modules/mod_jk.so
#
# 配置mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
#
#请求分发,对jsp文件,.do等动态请求交由tomcat处理
JkMount /*.jsp controller
JkMount /*.action controller
JkMount /servlet/* controller
注意上面的controller,这个就是负载均衡处理,对应workers.properties中的controller

这样就实现了把负载分发到tomcat1和tomcat2,

配置tomcat 6.0

为实现在workers.properties文件中,使用了两个tomcat,因此要在一个tomcat配置文件中声明两个tomcat实例(或者安装两个tomcat,修改为不同端口)。

配置如下:

 

 

实例化2个tomcat
</connector port="8007"protocol="ajp></connector port="8009"protocol="ajp>


 

成功截图

Apache是81端口,tomcat是8080端口

静态页



动态页



 

 

注意:可以把
</connector port="8080"protocol="http>


注释掉,这样tomcat就不在接收http请求,而是只接收apache转发过来的请求。

注释掉后,通过localhost:8080无法访问tomcat
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息