W一步: 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6
下蝲mod_jk_1.2.6_2.0.50.dll文gQ将其改名ؓmod_jk.so后放到apache2/modules目录中。?br />W二步: workers.propertiesQ?br />workers.tomcat_home=D:\My_Work\Tomcat\apache-tomcat-6.0.14
workers.java_home=D:\Program Files\Java\jdk1.5.0_07
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
W三步:用记事本打开apache/conf/httpd.conf文g末尾Q添加下面一D:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:\Program Files\Apache Software Foundation\Apache2.2\modules\workers.properties"
#ServerAdmin wangguiwei@gmail.com
#ServerName localhost
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:\My_Work\Tomcat\apache-tomcat-6.0.14\webapps"
Options Indexes FollowSymLinks
#allow from all
保存Q停止apache服务Q在启动Q就可以新配置应用了?
******************************
一QApache与Tomcat介绍
Apache是当前用最为广泛的WWW服务器YӞh相当强大的静态HTML处理的能力?
Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软g基金会(Apache Software FoundationQ的Jakarta目中的一个核心项目,由Apache、Sun和 ?其他一些公司及个h共同开发而成。由于有了Sun的参与和支持Q最新的Servlet和JSP 规范L能在Tomcat中得C玎ͼTomcat5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先q、性能E_Q而且免费Q因而深受Java爱好者的喜爱q得C部分软g开发商的认可,成ؓ目前比较行的Web应用服务器?
Tomcat和IIS、Apache{Web服务器一Ph处理HTML面的功能,另外它还是一个Servlet和JSP容器Q独立的Servlet容器是Tomcat的默认模式?br />二.Z么需要整?
整合的最主要原因是ؓ了在现有的硬件条件下提供最大的负蝲?
如果单独使用Tomcat做JSP服务器,在工作效率上会存在问?Tomcat处理静态HTML的能力不如ApacheQƈ且所能承受的最大ƈ发连接数也有一定的限制Q?
在测试中Q当q发q接较多ӞTomcat׃处于“僵歠Z状态,对后l的hq接失去响应。所以现在提Z个“整合”解x案:html?jsp的功能部分进行明分工,让tomcat只处理jsp部分Q其它的由apacheq个web server处理。Apache与Tomcat各司其职Q那么服务器的整体效率就能够得到提升?
三.整合的基本原?
作ؓApache下面的子目QTomcat ?Apache之间有着天然的联pR在实际操作中,主要是Apache作ؓL务器q行Q当监听到有jsp或者servlet的请求时Q将h转发l?tomcat服务器,由tomcat服务器进行解析后Q发回apacheQ再由apache发回用户?
在tomcat中有两个监听的端口,一个是8080用于提供web服务,一个是8009用于监听来自于apache的请求。当apache收到 jsp或者servlethӞ向tomcat ?009端口发送请求,交由tomcat处理后,再返回给apacheQ由apacheq回l客戗?
四.安装Apache与Tomcat服务?
操作pȝ环境QWindows xp home
安装文gQapache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so
到apache 与tomcat 的官方网站上面下载apache 与tomcatQ安装apache与tomcat
到http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下蝲 mod_jk-apache-2.2.4.so
mod_jk-apache-2.2.4.so拯到apache安装目录下面的modules目录中?
五.修改Tomcat讄
在tomcat的conf目录下徏一个workers.properties的文本文Ӟd如下配置
workers.tomcat_home="tomcat安装目录"
#让mod_jk模块知道Tomcat的安装\?
workers.java_home="java安装目录"
#让mod_jk模块知道jdk路径
ps="
worker.list=ajp13
#q里是关键,名字要和httpd.conf的一致。如果这里改了httpd.conf也要攏V?
worker.ajp13.port=8009
#工作端口,tomcat的jk监听端口Q可以查看Server.xml中有port="8009"
worker.ajp13.host=localhost
#Tomcat所在机器,如果安装在与apache不同的机器则需要设|IP
worker.ajp13.type=ajp13
#cdQ好像不能改Q会出问?
worker.ajp13.lbfactor=1
#负蝲q因子
六.修改Apache讄
修改apache安装目录下conf目录下的httpd.conf,增加如下配置
LoadModule jk_module modules/mod_jk-apache-2.2.4.so
JkWorkersFile "tomcat安装目录/conf/workers.properties"
JkLogFile "apache安装目录/logs/mod_jk.log"
JkMount /*.jsp ajp13
JkMount /*.do ajp13
七.整合操作说明
mod_jk-apache-2.2.4.so相当于是apache与tomcat之间的桥梁一P所以在apache的配|文件下面加上LoadModule jk_module modules/mod_jk-apache-2.2.4.so 此模块载入?
JkWorkersFile "tomcat安装目录/conf/workers.properties" 说明了mod_jk-apache-2.2.4.so 如何工作Q当出现要{发时Q将h发送到那里q行处理Q代表了一pd的工作参数?br /> JkLogFile "apache安装目录/logs/mod_jk.log" 讑֮日志的地址?
JkMount 说明了将什么样的URLq行发送到tomcatq行处理。JkMount /*.jsp ajp13 说明了要jsph发到tomcat,JkMount /*.do ajp13说明了要?do型的servlet发到tomcatq行处理。在实际的分发中Q如果servlet命名不带后缀的话Q将无法被识别,也就无法q行处理?br />
八.l束?
在查阅了不少文章之后Q我仔细的了解了下这两者进行整合的q程Q网上很多文章讲的整合应该不是真正意义上面的整合,希望此文章能够ؓ正ؓq些问题苦恼的同行们解决一点小困难……?/p>
首先我们先介l一下ؓ什么要?Apache ?Tomcat 之间q行q接。事实上 Tomcat 本n已经提供?HTTP 服务Q该服务默认的端口是 8080Q装?tomcat 后通过 8080 端口可以直接使用 Tomcat 所q行的应用程序,你也可以该端口改ؓ 80?/p>
既然 Tomcat 本n已经可以提供q样的服务,我们Z么还要引?Apache 或者其他的一些专门的 HTTP 服务器呢Q原因有下面几个Q?/p>
1. 提升寚w态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容?/p>
3. 无缝的升U应用程?/p>
q三点对一?web |站来说是非怹重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因ؓ某个 Tomcat 宕机或者是升E序D用户讉K不了Q而能完成q几个功能的、最好的 HTTP 服务器也只?apache ?http server 了,它跟 tomcat 的结合是最紧密和可靠的?/p>
接下来我们介l三U方法将 apache ?tomcat 整合在一赗?/p>
q是最常见的方式,你可以在|上扑ֈ很多关于配置JK的网,当然最全的q是其官Ҏ提供的文档。JK 本n有两个版本分别是 1 ?2Q目?1 最新的版本?1.2.19Q而版?2 早已l废弃了Q以后不再有新版本的推出了,所以徏议你采用版本 1?/p>
JK 是通过 AJP 协议?Tomcat 服务器进行通讯的,Tomcat 默认?AJP Connector 的端口是 8009。JK 本n提供了一个监控以及管理的面 jkstatusQ通过 jkstatus 可以监控 JK 目前的工作状态以及对?tomcat 的连接进行设|,如下图所C:
在这个图中我们可以看到当前JK配了两个q接分别?8109 ?8209 端口上,目前 s2 q个q接是停止状态,?s1 q个q接自上ơ重启后已经处理?47 万多个请求,量辑ֈ 6.2 ?GQ最大的q发数有 13 {等。我们也可以利用 jkstatus 的管理功能来切换 JK C同的 Tomcat 上,例如?s2 启用Qƈ停用 s1Q这个在更新应用E序的时候非常有用,而且整个切换q程对用h说是透明的,也就辑ֈ了无~升U的目的。关?JK 的配|文章网上已l非常多了,q里我们不再详细的介l整个配|过E,但我要讲一下配|的思\Q只要明白了配置的思\QJK 是一个非常灵zȝlg?/p>
JK 的配|最关键的有三个文gQ分别是
httpd.conf
Apache 服务器的配置文gQ用来加?JK 模块以及指定 JK 配置文g信息
workers.properties
?Tomcat 服务器的q接定义文g
uriworkermap.properties
URI 映射文gQ用来指定哪?URL ?Tomcat 处理Q你也可以直接在 httpd.conf 中配|这?URIQ但是独立这些配|的好处?JK 模块会定期更新该文g的内容,使得我们修改配置的时候无需重新启动 Apache 服务器?/p>
其中W二、三个配|文件名都可以自定义。下面是一个典型的 httpd.conf ?JK 的配|?/p>
# (httpd.conf) # 加蝲 mod_jk 模块 LoadModule jk_module modules/mod_jk.so # # Configure mod_jk # JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log JkLogLevel warn |
接下来我们在 Apache ?conf 目录下新Z个文件分别是 workers.properties、uriworkermap.properties。这两个文g的内容大概如?/p>
# # workers.properties # # list the workers by name worker.list=DLOG4J, status # localhost server 1 # ------------------------ worker.s1.port=8109 worker.s1.host=localhost worker.s1.type=ajp13 # localhost server 2 # ------------------------ worker.s2.port=8209 worker.s2.host=localhost worker.s2.type=ajp13 worker.s2.stopped=1 worker.DLOG4J.type=lb worker.retries=3 worker.DLOG4J.balanced_workers=s1, s2 worker.DLOG4J.sticky_session=1 worker.status.type=status |
以上?workers.properties 配置是我们前面那个屏幕抓图的页面所用的配置。首先我们配|了两个cd?ajp13 ?worker 分别?s1 ?s2Q它们指向同一台服务器上运行在两个不同端口 8109 ?8209 ?Tomcat 上。接下来我们配置了一个类型ؓ lbQ也是负蝲均衡的意思)?workerQ它的名字是 DLOG4JQ这是一个逻辑?workerQ它用来理前面配置的两个物理连?s1 ?s2。最后还配置了一个类型ؓ status ?workerQ这是用来监?JK 本n的模块。有了这三个 worker q不够,我们q需要告?JKQ哪?worker 是可用的Q所以就?worker.list = DLOG4J, status q行配置?/p>
接下来便?URI 的映配|了Q我们需要指定哪些链接是?Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面q个文g你就能明白其中配|的意义
/*=DLOG4J /jkstatus=status !/*.gif=DLOG4J !/*.jpg=DLOG4J !/*.png=DLOG4J !/*.css=DLOG4J !/*.js=DLOG4J !/*.htm=DLOG4J !/*.html=DLOG4J |
怿你已l明白了一大半了:所有的h都由 DLOG4J q个 worker q行处理Q但是有几个例外Q?jkstatus h?status q个 worker 处理。另外这个配|中每一行数据前面的感叹h什么意思呢Q感叹号表示接下来的 URI 不要?JK q行处理Q也是 Apache 直接处理所有的囄、css 文g、js 文g以及静?html 文本文g?/p>
通过?workers.properties ?uriworkermap.properties 的配|,可以有各U各Ll合来满x们前面提出对一?web |站的要求。您不妨动手试试Q?/p>
![]() ![]() |
![]() |
q是利用 Apache 自带?mod_proxy 模块使用代理技术来q接 Tomcat。在配置之前L保是否用的?2.2.x 版本?Apache 服务器。因?2.2.x 版本对这个模块进行了重写Q大大的增强了其功能和稳定性?/p>
http_proxy 模式是基?HTTP 协议的代理,因此它要?Tomcat 必须提供 HTTP 服务Q也是说必d?Tomcat ?HTTP Connector。一个最单的配置如下
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / http://localhost:8080/ |
在这个配|中Q我们把所?http://localhost 的请求代理到 http://localhost:8080/ Q这也就?Tomcat 的访问地址Q除?images、css、js 几个目录除外。我们同样可以利?mod_proxy 来做负蝲均衡Q再看看下面q个配置
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy> |
配置?JK 单多了,而且它也可以通过一个页面来监控集群q行的状态,q做一些简单的l护讄?/p>
?2Q监控集运行状?/b>
![]() ![]() |
![]()
|
ajp_proxy q接方式其实?http_proxy 方式一P都是?mod_proxy 所提供的功能。配|也是一P只需要把 http:// 换成 ajp:// Q同时连接的?Tomcat ?AJP Connector 所在的端口。上面例子的配置可以改ؓQ?/p>
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember ajp://server1:8080/ BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/ </Proxy> |
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.soQ?其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加?mod_proxy.so ?mod_proxy_http.soQ如果是 ajp_proxy 则需要加?mod_proxy.so ?mod_proxy_ajp.soq两个模块?/p>
![]() ![]() |
![]()
|
相对?JK 的连接方式,后两U在配置上是比较单的Q灵zL方面也一炚w不逊色。但q定性而言׃?JK q样久经考验Q毕?Apache 2.2.3 推出的时间ƈ不长Q采用这U连接方式的|站q不多,因此Q如果是应用于关键的互联|网站,q是采用 JK 的连接方式?/p>
Java Blocking Connector Java Nio Blocking Connector APR Connector
Classname Http11Protocol Http11NioProtocol Http11AprProtocol
Tomcat Version 3.x 4.x 5.x 6.x 6.x 5.5.x 6.x
Support Polling NO YES YES
Polling Size N/A Unlimited - Restricted by mem Unlimited
Read HTTP Request Blocking Blocking Blocking
Read HTTP Body Blocking Blocking Blocking
Write HTTP Response Blocking Blocking Blocking
SSL Support Java SSL Java SSL OpenSSL
SSL Handshake Blocking Non blocking Blocking
Max Connections maxThreads See polling size See polling size