friendlessstar 发表于 2018-11-27 10:33:25

Apache通过mod_jk整合Tomcat

  Apache通过mod_jk整合Tomcat


[*]Apache整合Tomcat的三种方法
[*]实验环境
[*]安装tomcat-connectors
[*]修改mod_Jk配置文件
[*]重启测试
  Apache结合Tomcat原因

  通常,将Apache与tomcat结合主要出于以下几个原因:


1 .提升对静态文件的处理性能,所有静态文件均由前段apache响应,其它JSP相关的请求分发给后端的Tomcat处理;
2 .利用tomcat服务器来做负载均衡以及容错,前端的apache可作为一个负载均衡,将请求分发给后端的多台tomcat,当一台tomcat宕机是,可以将其暂时移除集群;
3 .无缝的升级应用程序,在对后端的多台tomcat进行升级部署时,将其暂时移除集群来实现平滑升级
  Apache整合Tomccat的三种方法

  mod_jk


简称JK,这是最常见的方式,JK本身有两个版本分别是1和2,目前1最新版本是tomcat-connectors-1.2.43-src.tar.gz,而版本2早已废弃了,以后也不会有新
版本推出;JK是通过AJP协议与Tomcat服务器进行通讯的,Tomcat默认的AJP Connector端口是8009,JK本身提供了一个监控以及管理的页面jkstatus,通过
jkstatus可以监控JK目前的工作状态以及对tomcat的连接数进行设置
  http_proxy


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


ajp_proxy连接方式其实跟http_proxy方式一样,也是由mod_proxy所提供的功能,但是通过AJP协议与Tomcat服务器进行通讯的,这一点有与mod_jk相同
  系统环境

# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# uname -r
3.10.0-862.el7.x86_64
# hostname
Zabbix_Client_56.8
# ip a|grep 192.168.
inet 192.168.56.8/24 brd 192.168.56.255 scope global noprefixroute dynamic eth0
  安装tomccat-connectors

  注:安装apache和tomcat环境这里不在叙述,请查看网站内的apache和tomcat编译安装配置


下载jk软件包用来和tomcat连接
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz
# tar xf tomcat-connectors-1.2.46-src.tar.gz
# cd tomcat-connectors-1.2.46-src
# cd native/
# ./configure --prefix=/usr/local/tomcat-connectors --with-apxs=/usr/local/apache/bin/apxs
# make && make install
  查看mod_jk模块是否安装


# ls /usr/local/apache/modules/ | grep mod_jk.so
mod_jk.so
  修改mod_JK配置文件

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


httpd.conf:Apache服务器的配置文件,用来加载JK模块以及指定JK配置文件信息
worker.properties:到Tomcat服务器的连接定义文件
uriworkermap.properties:URL映射文件,用来哪些URL由Tomcat处理,也可以指定哪些URL不让Tomcat处理,取反使用 !号
  配置httpd.conf文件


# echo "Include conf/extra/httpd-jk.conf">> /usr/local/apache/conf/httpd.conf
# cd /usr/local/apache/conf/extra/
# vim httpd-jk.conf                  #把该文件名称定义为httpd-jk.conf是为了好辨认是jk模式
LoadModule jk_module modules/mod_jk.so                              #开启jk模块,并指定模块位置
JkWorkersFile conf/extra/httpd-jk-workers.properties                #指定tomcat服务器的连接定义文件
JkMountFile conf/extra/httpd-jk-uriworkermap.properties             #指定URL映射文件
JkLogFile logs/httpd-jk.log                                       #指定mod_jk模式所产生的日志数据路径
JklogLevel info                                                   #指定日志级别为info
  配置worker.properties文件


# vim httpd-jk-workers.properties
注意:这里可以配置任意多个Tomcat,此处配置了2个Tomat服务器,而且注释一个
注意:host和port根据自己实际配置,如果本机有两个tomcat,建议分别使用不同AJP的端口.避免冲突
注意:如果是两台不同的机器上跑得tomcat那就没有必要去修改ajp端口,因为jk会通过host来区分
#server列表
worker.list=connect,status,tomcat1,tomcat2      #定义worker列表
#==========tomcat1============
worker.tomcat1.port=8009                #ajp13端口号,在tomcat下server.xml中配置,默认为8009,如果server.xml文件中修改过,那这里也要跟server.xml内的一致
worker.tomcat1.host=127.0.0.1         #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13               #采用AJP协议进行通道
worker.tomcat1.lbfactor=1               #负载的权重值,权重值越大,接收的请求越多
#==========tomcat2============
#worker.tomcat2.port=8809
#worker.tomcat2.host=127.0.0.1
#worker.tomcat2.type=ajp13
#worker.tomcat2.lbfactor=1
#=========controller==========                                    #负载均衡器
worker.controller.type=lb                                           #采用类型为lb负载均衡类型
worker.connect.balanced_workers=tomcat1,tomcat2                     #指定负载列表,逗号分隔
worker.connect.sticky_session=false                                 ##此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制
worker.connect.sticky_session_force=1                               #这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互
#===========status============
worker.status.type=status                                           #用于httpd自身状态监控的status
  创建mod_jk URL映射文件


# vim httpd-jk-uriworkermap.properties
/*=connect                         #主机上的所有请求都转发给connect
/jkstatus=status                  #在/jkstatus页面中监控status集群状态
/*.gif=connect                  #!取反,前面加上!号就是不把这类文件转发给connect处理,本地处理,相当于动静分离,图片和html等静态文件在本地处理,动态文件由tomcat处理,但是本地因测试环境没有放置静态文件和图片,所以这里就不取反了
/*.jpg=connect
/*.png=connect
/*.css=connect
/*.js=connect
/*.htm=connect
/*.html=connect
  重启测试

  测试mod_jk模块请求转发


# /usr/local/apache/bin/apachectl restart
# curlhttp://127.0.0.1 -I
HTTP/1.1 200 200
Date: Tue, 16 Oct 2018 04:40:13 GMT
Server: Apache/2.4.35 (Unix) mod_jk/1.2.46
Content-Type: text/html;charset=UTF-8
以下访问的此机器的80端口,Apache通过mod_Jk模块使用AJP协议通过转发到了tomcat的8009端口进行处理


  测试mod_jk监控集群状态


# curl http://127.0.0.1/jkstatus -I
HTTP/1.1 200 OK
Date: Tue, 16 Oct 2018 07:47:44 GMT
Server: Apache/2.4.35 (Unix) mod_jk/1.2.46
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html




页: [1]
查看完整版本: Apache通过mod_jk整合Tomcat