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

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