APACHE整合TOMCAT

来源:互联网 发布:unity3d ui界面设计 编辑:程序博客网 时间:2024/06/10 18:48

转自http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/与http://wenzhongxiang.blog.51cto.com/6370734/1285892 两篇文章

Tomcat简介及作用:

Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.0

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。


Apache是一个强大的Web服务器在处理静态页面、处理大量网络客户请求、支持服务的种类以及可配置方面都有优势,高速并且强壮。但是没有JSP/Servlet的解析能力。整合ApacheTomcat可以看作是用TomcatApachejsp/servlet解析插件,将两者优势结合起来。不过Tomcat作为一个Web服务器,本身具备了基本的Web服务功能,在SUN的力推下,将来或许越来越强壮到不需要借助Apache优势的地步。

Apachetomcat的异同:

  • apache支持静态页,tomcat支持动态的,比如servlet等,

  • 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由tomcat来处理的。

  • apache可以支持php\cgi\perl,但是要使用java的话,你需要tomcatapache后台支撑,将java请求由apache转发给tomcat处理。

  • apacheweb服务器,Tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。

  • Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)

  • TomcatApache组织在符合J2EEJSPServlet标准下开发的一个JSP服务器;

Apachetomcat整合的好处

  • 如果客户端请求的是静态页面,则只需要Apache服务器响应请求

  • 如果客户端请求动态页面,则是Tomcat服务器响应请求

  • 因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销

  • 提升对静态文件的出来能力

  • 利用WEB服务器做负载均衡以及容错

Apache只是一个WEB服务器,并不能运行JSP程序。如果要运行JSP程序,还需要安装TOMCAT服务器软件,通过连接器组件整合TOMCATAPACHE。当用户请求访问.jsp网页时,由APACHE自动调用TOMCAT服务进行解析,并将结果页面返回到客户端浏览器。

apacheweb服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。

----------------------------------------------------------------------------------------------------------------

接下来我们介绍三种方法将 apache 和 tomcat 整合在一起

1,apache自带(mod_proxy、mod_proxy_balancer)

这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写,大大的增强了其功能和稳定性。

1)mod_proxy:需要启用的模块有mod_proxy与与之相应的访问方式模块,比如http访问则启用mod_proxy_http_module模块(若是ajp访问则启用mod_proxy_ajp_module,若不知道,可以都开启)

http_proxy 模式是基于 HTTP 协议的代理,因此它要求 Tomcat 必须提供 HTTP 服务,也就是说必须启用 Tomcat 的 HTTP Connector。一个最简单的配置如下

ProxyPass 路由映射匹配模式并且匹配成功后转发

ProxyPassReverse 路由匹配映射后的转发请求到某个具体tomcat服务器(注意这里同样的路由只能出现一次,多次则以第一次为主,不能做负载均衡)

ProxyPass /images !ProxyPass /css !ProxyPass /js !ProxyPass / http://localhost:8080/
ProxyPass         /test  http://localhost:8080/test(若是ajp则可以改成ajp:localhost:8009/golf,请注意ajp则是ajp的宽阔,http则是http的端口)ProxyPassReverse  /test  http://localhost:8080/test  

在这个配置中,我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ,这也就是 Tomcat 的访问地址,除了 images、css、js 几个目录除外。

2)mod_proxy_balancer:需要开启的模块有mod_proxy,slotmem_shm_module,lbmethod_byrequests_module,加上何种形式访问的模块(http访问则http端口,ajp则ajp端口)

ProxyPass /images !ProxyPass /css ! ProxyPass /js !ProxyPass / balancer://example/<Proxy balancer://example/>BalancerMember http://localhost:8080/ route=tomcat1(路由可以选择不需要,还可以配置连接超时等,具体查看官方api)BalancerMember http://localhost:8081/ route=tomcat2BalancerMember http://localhost:8082/ route=tomcat3</Proxy>

配置Balnacer Manager:

1,开启mod_status 模块

2,开启mod_proxy_balancer模块

3,配置拦截

<Location /balancer-manager>  
    SetHandler balancer-manager  
    order Deny,Allow  
    Allow from all  
    Allow from localhost  
</Location>

注意:banlancer代理的过滤顺序是按照从上到下。

图 2:监控集群运行状态
图 2:监控集群运行状态

采用 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这两个模块。


3,JK(次方法比较复杂,而且要编译mod_jk.so模板文件,建议使用apache自带的)

去apache官网下载(http://tomcat.apache.org/download-connectors.cgi)自己操作系统对应JK插件与源码包(源码包主要是有个demo可以让你按照demo配置JK)

1,解压JK源码,找到{%JK_HOME}/conf目录

2,配置APACHE WEB服务器 在httpd.conf文件尾端加入

Include E:/mod-jk/conf/httpd-jk.conf({%JK_HOME}/conf/httpd-jk.conf路径)

3,配置httpd-jk.conf文件(按照demo修改该修改的地方)

1)这里主要修改JK插件文件的地址与相关的日志文件地址

2)在httpd-jk.conf文件中部修改URL MAP映射:如

JkMount /*.jsp  balancer (/*.jsp代表过滤jsp结尾的URL  balancer代表按照哪个worker工作做来执行解析。worker配置在同级目录下的workers.properties文件)
JkMountCopy On (开启URL映射)

3)配置workers.properties文件,可以按照demo提供的来修改自己想要的,具体怎么修改可以按照官方API来修改:

我提供一个简单的自己的demo

worker.list=balancer 

worker.balancer.type=lb 

worker.balancer.balance_workers=node1,node2

worker.node1.activation=A
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8009

worker.node2.reference=worker.template

worker.node2.activation=A
worker.node2.host=localhost
worker.node2.port=8010

worker.template.type=ajp13


0 0
原创粉丝点击