{channel.title!channel.name} - 楚淮公司周东林

apache与tomcat整合

整合apache http server 和 tomcat可以提升对静态文件的处理性能、利用WEB服务器来做负载均衡以及容错、无缝地升级应用程序。


Tomcat本身已经提供了http服务,该服务的默认端口是8080,装好Tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,也可以修改server.xml配置将端口修改为80.引入APACHE或者其他专门的HTTP服务器与TOMCAT整合有以下几个原因:

1.提升对静态文件的处理能力

2.利用web服务器来做均衡负载和容错

3.无缝地升级应用程序

这三点对于一个WEB网站来说是极其重要的,我们希望我们的网站不仅是速度快、而且要稳定,不能因为某个TOMCAT宕机或者升级程序导致用户访问不了,而能完成这几个功能的、最好的HTTP服务器也就只有APACHE的HTTP SERVER 了,它跟TOMCAT的结合是最紧密和可靠的了。

接下来介绍三种负载方式

一、JK(mod_jk)

    这是最常见的方式,JK本身有两个版本分别是1和2目前1最新的版本是1.2.42,而版本2早已废弃,不在有新版本推出,建议采用版本1。

JK配置文档百度上已经非常多了,自行百度或者参照本站JK安装配置文档,下面讲下JK的配置思路。

JK的最关键的三个文件分别是

httpd.conf  #Apache 服务器配置文件,用来加载JK模块以及指定JK配置文件信息per

workers.properties  #到Tomcat的链接定义文件

uriworkrmap.properties  #URI映射文件。用来指定那些URL由Tomcat处理,也可以直接在httpd.conf 中配置这些URI, 独立这些配置的好处是方便JK模块定期更新该文件内容,方便添加删除服务器,使得修改配置的时候不需要重新启动Apache服务器。

其中workers.properties和uriworkrmap.properties的文件名可以自己定义,下面是一个典型的httpd.conf 对 JK 的配置

#加载 JK 模块 mod_jk.so 和配置文件 workers.properties
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "conf/workers.properties"
#设置 JK 日志文件, 设置 JK 日志级别和格式
JkLogFile "logs/mod_jk.log"
JkLogLevel warn
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JKMountFile "conf/uriworkrmap.properties"
接下来在Apache的conf目录下新建workers.properties和uriworkrmap.properties两个文件文件大概内容如下

#定义了一个负载平衡服务器,名称与uriworkrmap.propertie 中对应

#workers.properties的配置信息
worker.list=loadbalancer
worker.loadbalancer.type=lb
#将两节点加入负载平衡服务器
worker.loadbalancer.balance_workers=worker1,worker2,worker3
#保证会话亲和,设为 true
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=false
#节点 1
worker.worker1.type=ajp13
worker.worker1.host=192.168.134.100 # Tomcat 的 IP
worker.worker1.port=8109 #AJP 的端口,要和 Tomcatb 的 AJP 端口对应
worker.worker1.lbfactor=1 #权重
worker.worker1.socket_keepalive=true
worker.worker1.socket_timeout=600
#节点 2 含义同上
worker.worker2.type=ajp13
worker.worker2.host=192.168.134.101
worker.worker2.port=8209
worker.worker2.lbfactor=1
worker.worker2.socket_keepalive=true
worker.worker2.socket_timeout=600
#节点 3 含义同上
worker.worker3.type=ajp13
worker.worker3.host=192.168.134.1
worker.worker3.port=8309
worker.worker3.lbfactor=1
worker.worker3.socket_keepalive=true
worker.worker2.socket_timeout=600
#集群状态监控配置
worker.list=mystatus
worker.mystatus.type=status
worker.mystatus.read_only=1

我们配置了三个类型为ajp13的worker 分别是worker1,worker2,worker3他们指向了三台服务器8109、8209、8309的Tomcat上,我们配置的负载均衡器的名称为loadbalancer与uriworkrmap.propertie 中配置要一致。

接下来配置 URI 的映射

/* = loadbalancer

/tong_status mystatus

!/*.gi f= loadbalancer

!/*.jpg= loadbalancer

!/*.js = loadbalancer

!/*.html = loadbalancer

!/*.htm  = loadbalancer

所有的请求都由 loadbalancer 这个 worker 进程处理,但是有几个例外, /tong_status 请求由 mystatus 这个worker 处理。下面感叹号的代表 URI 不需要由 JK 处理,由 Apache直接处理 gif、 jpg、 js、 html、 htm等静态内容其他CSS、 PNG 格式的静态内容自行脑补。

二、http_proxy

    这是利用 Apache 自带的 mod_proxy 模块使用代理技术来链接 Tomcat ,意见使用 Apache 2.2.xx 版本,这个版本对 http_proxy 进行了重写,大大增强了其功能和稳定性。

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

    ProxyPass  /images !

    ProxyPass  /css !

    ProxyPass  /js !

    ProxyPass  / http://localhost:8080/

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

    ProxyPass  /images !

    ProxyPass  /css !

    ProxyPass  /js !

    ProxyPass / balancer://example/

   

    BalancerMember http://server1:8080/

    BalancerMember http://server2:8080/

    BalancerMember http://server3:8080/

   

配置比 JK 简单多了,可以通过 http://localhost:8080/balancer-manager 来监控集群状态。

三、ajp_proxy

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

    ProxyPass  /images !

    ProxyPass  /css !

    ProxyPass  /js !

    ProxyPass / balancer://example/

   

    BalancerMember ajp://server1:8080/

    BalancerMember ajp://server2:8080/

    BalancerMember ajp://server3:8080/

   

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

    相对于 JK 的链接方式,后两种在配置上比较简单,灵活性方面也不逊色。但就稳定性而言不像 JK 久经考验,如果应用于关键的互联网网站建议使用 JK 的链接方式。


浏览.发表于:2017-01-17 10:33:56