配置apache通过mod_jk模块反向代理Tomcat连接

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。

 

Apache2.4.12:192.168.2.110

            tomcatA:192.168.2.120

            tomcatB:192.168.2.121

 

 

[root@node110 native]# yum install httpd-devel gccglibc-devel

 

[root@www.magedu.com ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz

[root@www.magedu.com ~]# cd tomcat-connectors-1.2.37-src/native/

[root@www.magedu.com ~]#./configure --with-apxs=/usr/local/apache2.4.12/bin/apxs

[root@www.magedu.com ~]# make && make install

 

默认模块安装目录

chmod 755 /usr/local/apache2.4.12/modules/mod_jk.so

 

模块配置文件

apache要使用mod_jk连接器需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/usr/local/apache2.4.12/conf/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:

# Load the mod_jk

LoadModule jk_module  modules/mod_jk.so

JkWorkersFile /etc/httpd/extra/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel  debug

JkMount  /*  TomcatA

JkMount /status/  stat1

 

apache主配置文件httpd.conf中加载http-jk.conf文件

Include conf/extra/httpd-jk.conf

 

除了需要使用LoadModule指令在apache中装载模块外,mod_jk还需要在apache的主配置文件中设置其它一些指令来配置其工作属性。如JkWorkersFile则用于指定保存了worker相关工作属性定义的配置文件,JkLogFile则用于指定mod_jk模块的日志文件,JkLogLevel则可用于指定日志的级别(info,error, debug),此外还可以使用JkRequestLogFormat自定义日志信息格式。而JkMount(格式: JkMount  <URL to match>  <Tomcat worker name>)指定则用于控制URL与Tomcatworkers的对应关系。

 

为了让apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要编辑/etc/httpd/httpd.conf,添加如下一行:

Include /etc/httpd/extra/httpd-jk.conf

 

对于apache代理来说每一个后端的Tomcat实例中的engine都可以视作一个worker而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。

 

workers.properties文件一般由两类指令组成:一是mod_jk可以连接的各worker名称列表,二是每一个worker的属性配置信息。它们分别遵循如下使用语法。

 

worker.list = < a comma separated list of workernames >

worker. <worker name> .<property> =<property value>

 

其中worker.list指令可以重复指定多次,而worker name则是Tomcat中engine组件jvmRoute参数的值。如:

worker.TomcatA.host=172.16.100.1

 

根据其工作机制的不同,worker有多种不同的类型,这是需要为每个worker定义的一项属性woker.<workname>.type。常见的类型如下:

◇ ajp13:此类型表示当前worker为一个运行着的Tomcat实例。

◇ lb:lb即load balancing,专用于负载均衡场景中的woker;此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker。

◇   status:用户显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例。具体示例如请参见后文中的配置。

 

worker其它常见的属性说明:

◇ host:Tomcat 7的worker实例所在的主机;

◇ port:Tomcat 7实例上AJP1.3连接器的端口;

◇ connection_pool_minsize:最少要保存在连接池中的连接的个数;默认为pool_size/2;

◇ connection_pool_timeout:连接池中连接的超时时长;

◇ mount:由当前worker提供的context路径,如果有多个则使用空格格开;此属性可以由JkMount指令替代;

◇ retries:错误发生时的重试次数;

◇ socket_timeout:mod_jk等待worker响应的时长,默认为0,即无限等待;

◇ socket_keepalive:是否启用keep alive的功能,1表示启用,0表示禁用;

◇ lbfactor:worker的权重,可以在负载均衡的应用场景中为worker定义此属性;

 

另外,在负载均衡模式中,专用的属性还有:

◇balance_workers:用于负载均衡模式中的各worker的名称列表,需要注意的是,出现在此处的worker名称一定不能在任何worker.list属性列表中定义过,并且worker.list属性中定义的worker名字必须包含负载均衡worker。具体示例请参见后文中的定义。

◇ method:可以设定为R、T或B;默认为R,即根据请求的个数进行调度;T表示根据已经发送给worker的实际流量大小进行调度;B表示根据实际负载情况进行调度。

◇sticky_session:在将某请求调度至某worker后,源于此址的所有后续请求都将直接调度至此worker,实现将用户session与某worker绑定。默认为值为1,即启用此功能。如果后端的各worker之间支持session复制,则可以将此属性值设为0。

 

workes配置文件:

根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:

worker.list=TomcatA,stat1

worker.TomcatA.port=8009

worker.TomcatA.host=192.168.2.120      #后端tomcat服务器地址,在开启8009端口,ajp协议

worker.TomcatA.type=ajp13

worker.TomcatA.lbfactor=1

worker.stat1.type = status

 

至此一个基于mod_jk模块与后端名为TomcatAworker通信的配置已经完成重启httpd服务即可生效。

 

启动apache服务:

[root@node110 conf]#/usr/local/apache2.4.12/bin/apachectl start

 

通过网页查看

http://192.168.2.110


 

http://192.168.2.110/status/


 

注意:status/的访问要做访问控制

 

vim httpd-jk-proxy.conf

[root@node110 extra]# cat httpd-jk-proxy.conf 
# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /usr/local/apache2.4.12/conf/extra/workers.properties_proxy
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1


vim workers.properties_proxy

worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.2.120 #后端tomcat服务器
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status





YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS