我们为了提高静态页面的访问速度,需要把tomcat专门集成进web服务器,如apache或在IIS。
·集成的考虑因素
·集成技术的选择
·JK插件
·Tomcat体系接口与JK插件的工作原理
·Tomcat与IIS服务器的继承
·Tomcat与Apache服务器集成
集成的考虑因素:
集成的理由很多,不集成的理由也有很多,特别是5.0以后Tomcate的性能已经有了很大的改善。
是否集成要看具体的应用情况:
如:http://wiki.apache.org/tomcat/FAQ/Connectors 所述
我为什么要与Tomcat Apache的结合? (or not) (或不)
流行的和apache整合技术:
JK是目前的首选技术
JK2目前也不被支持
mod_proxy简单但不能实现有会话状态的负载均衡
什么是JK(或AJP)?
AJP is a wire protocol. AJP是一个有线协议。 It an optimized version of the HTTP protocol to allow a standalone web server such as Apache talk to Tomcat.这是HTTP协议的优化版本,让一个独立的Web服务器,例如Apache Tomcat的交谈。 Historically, Apache has always been much faster than Tomcat at serving static content.从历史上看,阿帕奇一直远远快于Tomcat的服务于静态内容。 The idea is to let Apache serve the static content when possible, then proxy the request back to Tomcat for Tomcat related content.这样做是为了让Apache的静态内容服务时,可能的话,那么代理的Tomcat的相关内容的请求到Tomcat的。
Which connector: mod_jserv, JK, JK2, mod_webapp or mod_proxy?
远离mod_webapp,又名经。 It is deprecated and unsupported due to lack of developer interest and there are better options such as jk and mod_proxy.它是过时和不支持,由于缺乏兴趣的发展商也有诸如JK和mod_proxy来更好的选择。 It WILL NOT run on windows. Do not use mod_webapp or warp.它不能运行在Windows上。 请不要使用mod_webapp或变形。
mod_jserv is unsupported and will not be supported in Tomcat 5. mod_jserv是不受支持的,不会在Tomcat 5的支持。 mod_jserv was the original connector which supported the ajp protocol. Do not use mod_jserv. mod_jserv是原来的连接器,其中支持ajp协议。mod_jserv不要使用。
jk2 is a refactoring of mod_jk and uses the Apache Portable Runtime (apr). jk2是mod_jk的重构,并使用Apache可移植运行(4月)。 But due to lack of developer interest, it is unsupported.但是,由于开发商缺乏兴趣,这是不受支持的。 The alternative is mod_jk or mod_proxy_ajp. Do not use jk2.另一种是mod_jk的或mod_proxy_ajp。 不要使用jk2。
mod_jk is great and should be used for production . mod_jk的是伟大的 , 应当用于生产 。 It is still under active development and also works for the apache 2.X series for cases where you do not want to use mod_proxy_ajp.目前还正在积极发展,也为Apache 2.X的一系列工程的案件,您不希望使用mod_proxy_ajp。
There are many reasons to integrate Tomcat with Apache.原因是多方面的集成到Apache Tomcat的。 And there are reasons why it should not be done too.并且有为什么不应该做太多的理由。 Needless to say, everyone will disagree with the opinions here.不用说,每个人会不同意的意见在这里。 With the performance of Tomcat 5 and 6, performance reasons become harder to justify.随着Tomcat的5和6的性能,性能的原因变得难以判断。 So here are the issues to discuss in integrating vs not.因此,这里的问题的讨论没有纳入队。
Speed.速度。 Apache is faster at serving static content than Tomcat. Apache是在服务速度比Tomcat的静态内容。 But unless you have a high traffic site, this point is useless.但是,除非你有一个高流量的网站,这一点是没有用处的。 But in some scenarios, tomcat can be faster than Apache httpd.但是,在某些情况下,Tomcat可以更快比Apache httpd的。 So benchmark YOUR site. Tomcat can perform at httpd speeds when using the proper connector (APR with sendFile enabled).因此,基准您的网站。Tomcat可以在httpd的速度进行发送文件时 , 使用正确的连接器(4月启用)。 Speed should not be considered a factor when choosing between Apache httpd and Tomcat 速度不应该考虑因素时 , 选择与阿帕奇的httpd和Tomcat
------------------------------------------------------------------------------------
JK插件:
·IIS和apache等专门服务器都支持插件技术,可以将符合各种条件的请求交给插件区处理,IIS和apache能与tomcat集成的关键原因就是这种插件技术。
·如果在JK插件预先配置好的URL映射信息中,所有“/*.jsp”形式的URL都由Tomcat服务器处理,那么,当用户请求时,WEB服务器讲调用JK插件来处理,JK插件又把这个请求转发给tomcat服务器处理,tomcat服务器最后将相应的结果经JK插件传递给WEB服务器
·不同的web服务器查的插件形式是不同的,tomcat开发小组为不同的web服务器提供了相应的JK插件
·不同版本的tomcat与其他的web服务器的各种版本的集成时的JK插件也有可能不同
下载JK插件
http://tomcat.apache.org/
Tomcat Connectors
http://tomcat.apache.org/download-connectors.cgi
我用的是:Apache HTTP Server 2.2
apache-tomcat-6.0.18
mod_jk-1.2.28-httpd-2.2.3.so
放入apache modules 中,
创建文件:
workers.properties
配置apache需要转发到的服务器的端口、地址、类型
worker.list=worker1,worker2
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.type=ajp13
worker.worker1.host=192.168.0.33
worker.worker1.port=8009
可以如上配置两个转发接收的服务器,也可以配置一个
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
这三个参数不是随意配置的,一定要于我们tomcat server文件里面的
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
ajp监听配置一致
我们的workers.properties 还可以配置如下:
worker.list=ajp13w
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.ajp13w.type=lb
worker.ajp13w.balance_workers=worker1
负载均衡的配置,这样worker1就不能配置在list里面了,而在加入到ajp13w里
放入apache conf目录中
配置httpd.conf文件:
加入Include conf/mod_jk.conf 或在,直接在httpd.conf加入mod_jk.conf的内容,如下:
# Load mod_jk module
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Send JSPs for context /examples to worker named worker1
JkMount /*.jsp worker1
JkMount /*.do worker1
注意这里的worker1不是乱写的,是我们上面workers.properties配置过的