Apache HTTP Server与Tomcat的三种连接方式介绍

首先我们介绍一下为什么要让Apache与Tomcat之间进行连接。事实上Tomcat本身已经提供了HTTP服务, 该服务默认端口是8080,安装好Tomcat后通过8080端口可以直接访问Tomcat所运行的应用程序,你也可以将该端口号修改为8080。
既然Tomcat本身已经可以提供这样的服务,我们为什么还要引入Apache或者其他的一些专门的HTTP服务器呢?原因有下面几个:
1. 提升对静态文件的处理性能
2. 利用Web服务器来做负载均衡以及容错
3. 无缝的升级应用程序
这三点对一个web网站来说是非常重要的,我们希望自己的网站不仅速度快,而且要稳定,不能因为某个Tomcat宕机或者是升级程序导致用户无法访问,而完成这几个功能最好的HTTP服务器也就只有Apache的HTTP Server了,它跟Tomcat的结合紧密且可靠。
接下来我们介绍将Apache和Tomcat整合在一起的三种方法。

JK

这种事最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全面的还是其官方网站提供的文档。目前最新的版本是1.2.41
JK是通过AJP协议与Tomcat服务器进行通讯的,Tomcat默认的AJP Connector的端口是8009。JK本身提供了一个监控及管理的页面jkstatus,通过jkstatus可以监控JK目前的工作状态,还可以对Tomcat连接进行设置,如下图所示:

JK的配置最关键的有三个配置文件,分别是
httpd.conf
Apache服务器的配置文件,用来加载JK模块以及指定JK配置文件信息
workers.properties
到Tomcat服务器的连接定义文件
uriworkermap.properties
URI映射文件,用来指定哪些URL由Tomcat处理,你也可以直接在httpd.conf中配置这些URI,但是这些配置放在独立文件的好处是JK模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动Apache服务器。
其中第二、三个配置文件名都可以自定义。下面是一个典型的httpd.conf对JK的配置

#(httpd.conf)
#加载mod_jk模块
LoadModule jk_module modules/mod_jk.so

#
# Configure mod_jk
#

JkWorkersFile conf/workers.properties
JMountFile conf/uriworkermap.properties
JKLogFile logs/mod_jk.log
JkLogLevel warn

接下来我们在Apache的conf目录下新建两个文件分别是workers.properties、uriwokermap.properties。这两个文件的内容大概如下:

#
# workers.properties
#

# lis the workers by name

worker.list=DLOG4J, status

# localhost server 1
# ------------------
worker.s1.prot=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配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为ajp13的worker分别是s1和s2,它们指向同一台服务器上运行在两个不同端口8109和8209的Tomcat上。接下来我们配置了一个类型为lb(也就是负载均衡的意思)的worker,它的名字是DLOG4J,这是逻辑的worker,它用来管理前面配置的两个物理连接s1和s2。最后还配置了一个类型为status的worker,这是用来监控JK本身的模块。有了这三个worker还不够,我们还需要告诉JK,哪些worker是可用的,所以就有worker.list=DLOG4J, status这行配置。
接下来便是URI的映射配置了,我们需要指定哪些连接是由Tomcat处理的,哪些是由Apache直接处理的,看看下面这个配置文件就能明白其中配置的意义

/*=DLOG4J
/jkstatus=status

!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J

相信你已经明白了了大半了:所有的请求都由DLOG4J这个worker处理,但是有几个例外,/jkstatus请求由status这个worker处理。另外这个配置中每一行数据前面的感叹号是什么意思呢?感叹号表示接下来的URI不要由JK进行处理,也就是Apache直接处理所有的图片、css文件、js文件以及静态html文本文件。
通过workers.properties和uriworkermap.properties的配置,可以有各种各样的组合来满足我们前面提出一个web网站的要求,您不妨动手试试!


http_proxy

这是利用Apache自带的mod_proxy模块使用代理技术来连接Tomcat。在配置之前请确保是否使用的是2.2.x版本的Apache服务器。因为2.2.x版本对这个模块进行了重写,大大的增强了其功能和稳定性。
http_proxy模式是基于HTTP协议的代理,因此它要求Tomcat必须提供HTTP服务,也就是说必须启用Tomcat的HTTP Connector。一个最简单的配置如下:

ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/

在这个配置中,我们把所有http://localhost的请求代理到http://localhost:8080/,也就是Tomcat的访问地址,除了images、css、js几个目录以外。我们同样可以利用mod_proxy来做负载均衡,再看看下面这个配置:

ProxyPass /images !
ProxyPass /css !
ProxyPass /js !

ProxyPass / balancer://example/
<Proxy balancer://example/>
BalanceMember http://server1:8080/
BalanceMember http://server2:8080/
BalanceMember http://server3:8080/
</Proxy>

配置比JK简单多了,而且它也可以通过一个页面来监控集群运行的状态,并做一些简单的维护设置。


ajp_proxy

ajp_proxy连接方式其实跟http_proxy方式一样,都是由mod_proxy所提供的功能。配置也是一样,只需要把http://换成ajp://,同时连接的是Tomcat的AJP Connector所在的端口。上面例子的配置可以改为:

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相关的模块有mode_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这两个模块。


猜你喜欢

转载自blog.csdn.net/zitong00/article/details/48977707