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相同

系统环境

[root@Zabbix_Client_56 /]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@Zabbix_Client_56 /]# uname -r
3.10.0-862.el7.x86_64
[root@Zabbix_Client_56 /]# hostname
Zabbix_Client_56.8
[root@Zabbix_Client_56 /]# 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
[root@Zabbix_Client_56 src]# tar xf tomcat-connectors-1.2.46-src.tar.gz 
[root@Zabbix_Client_56 src]# cd tomcat-connectors-1.2.46-src
[root@Zabbix_Client_56 tomcat-connectors-1.2.46-src]# cd native/
[root@Zabbix_Client_56 native]# ./configure --prefix=/usr/local/tomcat-connectors --with-apxs=/usr/local/apache/bin/apxs
[root@Zabbix_Client_56 native]# make && make install

查看mod_jk模块是否安装

[root@Zabbix_Client_56 native]# 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文件

[root@Zabbix_Client_56 native]# echo "Include conf/extra/httpd-jk.conf"  >> /usr/local/apache/conf/httpd.conf
[root@Zabbix_Client_56 native]# cd /usr/local/apache/conf/extra/
[root@Zabbix_Client_56 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文件

[root@Zabbix_Client_56 extra]# 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映射文件

[root@Zabbix_Client_56 extra]# 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模块请求转发

[root@Zabbix_Client_56 extra]# /usr/local/apache/bin/apachectl restart
[root@Zabbix_Client_56 extra]# curl  http://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端口进行处理

Apache通过mod_jk整合Tomcat

测试mod_jk监控集群状态

[root@Zabbix_Client_56 bin]# 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

Apache通过mod_jk整合Tomcat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章