MOD_JK Installation and Configuration - Apache HTTPD and Tomcat
Apache 和 Tomcat 是每个人都学习的中间件的 A 和 B,它们在全球范围内广泛使用 Web 服务器和应用程序服务器(有时称为 Web 容器,因为它没有 EJB)
它就像一个沙盒,让每个新手都可以学习并在以后根据需要进行操作
如果你不是很了解 mod_jk 和 AJP 协议,去谷歌搜索你会得到很多链接。
本文的主要目的是介绍实际使用 mod_jk 的 apache 和 tomcat 集成。因此我也没有深入研究 apache HTTP 服务器(或)tomcat。
本文假设您的Linux 机器安装了Apache2.4+
我们走吧
目录
apachectl status
启动服务(如果还没有)
apachectl start
在安装 Mod_JK 之前,您必须安装一些依赖项
yum install httpd-devel ( source of apxs )
yum install gcc libtool
Apache Tomcat® - Tomcat Connectors (mod_jk) Downloads
您将获得一些可下载的链接,如下所示。
您可以选择使用 wget 实用程序通过放置镜像链接将 tar 球目录下载到您的服务器
在服务器中的任何临时位置获得 tar.gz 文件后,使用tar -xvf
tar -xvf tomcat-connectors-1.2.42-src.tar.gz
解压后,进入解压后的目录,然后进入本机目录
tomcat-connectors-1.2.42-src/native
在同一本机目录中运行以下命令
./configure -with-apxs=/usr/bin/apxs
root@mw-web01# ./configure -with-apxs=/usr/bin/apxs
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
注意*:有时 apxs 也可以在 /usr/sbin 中找到,请使用 locate apxs(或) find / -name “apxs” 命令查找 apxs 的位置,并使用相应的路径与 configure 命令
执行 make
命令在同一native
目录下构建 .so(系统对象)文件
root@mw-web01# make
Making all in common
make[1]: Entering directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/common'
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -std=gnu99 -I. -I/usr/include/httpd -DHAVE_CONFIG_H -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -pthread -DHAVE_APR -I/usr/include/apr-1 -I/usr/include/apr-1 -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -c jk_ajp12_worker.c -o jk_ajp12_worker.lo
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -std=gnu99 -I. -I/usr/include/httpd -DHAVE
...........................
............................
make[1]: Leaving directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/apache-2.0'
make[1]: Entering directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native'
target="all"; \
list='common apache-2.0'; \
for i in $list; do \
echo "Making $target in $i"; \
if test "$i" != "."; then \
(cd $i && make $target) || exit 1; \
fi; \
done;
Making all in common
make[1]: Entering directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/common'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/common'
Making all in apache-2.0
make[1]: Entering directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/apache-2.0'
../scripts/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool --silent' mod_jk.la `pwd`
/usr/lib64/apr-1/build/libtool --silent --mode=install cp mod_jk.la /etc/httpd/modules/tomcat-connectors-1.2.42-src/native/apache-2.0/
libtool: install: warning: remember to run `libtool --finish /usr/lib64/httpd/modules'
make[1]: Leaving directory `/usr/lib64/httpd/modules/tomcat-connectors-1.2.42-src/native/apache-2.0'
现在应该可以看到 apache2.0
目录下创建的native
目录了,
如果您列出目录的内容,您可以看到 mod_jk.so
创建的文件,将其复制到 modules
apache Web 服务器的目录
root@ mw-web01 # pwd
/tmp/tomcat-connectors-1.2.42-src/native/apache-2.0
root@ mw-web01 # ls -rlt
total 4960
-rw-r--r-- 1 root bin 1335 Sep 13 2010 config.m4
-rw-r--r-- 1 root bin 11019 Nov 14 2011 mod_jk.dsp
-rw-r--r-- 1 root bin 6351 Nov 16 2011 NWGNUmakefile
-rw-r--r-- 1 root bin 9541 Nov 16 2011 bldjk.qclsrc
-rw-r--r-- 1 root bin 10350 Nov 16 2011 bldjk54.qclsrc
-rw-r--r-- 1 root bin 6947 Mar 9 2012 Makefile.vc
-rw-r--r-- 1 root bin 1434 Dec 20 2014 Makefile.apxs.in
-rw-r--r-- 1 root bin 3068 Dec 20 2014 Makefile.in
-rw-r--r-- 1 root bin 147853 Sep 22 2016 mod_jk.c
-rw-r--r-- 1 root root 3328 Nov 6 14:37 Makefile
-rw-r--r-- 1 root root 1622 Nov 6 14:37 Makefile.apxs
-rw-r--r-- 1 root root 365288 Nov 6 14:49 mod_jk.o
-rw-r--r-- 1 root root 270 Nov 6 14:49 mod_jk.lo
-rwxr-xr-x 1 root root 1553336 Nov 6 14:49 mod_jk.so
-rw-r--r-- 1 root root 920 Nov 6 14:49 mod_jk.la
-rw-r--r-- 1 root root 2917994 Nov 6 14:49 mod_jk.a
在我的情况下 /etc/httpd/modules
cp mod_jk.so /etc/httpd/modules
这是我的 server_root 目录列表 /etc/httpd
供您参考
root@ mw-web01 # ls -rlt
total 4
drwxr-xr-x. 2 root root 78 Oct 31 13:58 conf.d
drwxr-xr-x. 2 root root 4096 Oct 31 13:58 conf.modules.d
lrwxrwxrwx 1 root root 19 Oct 31 13:58 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root 29 Oct 31 13:58 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx 1 root root 10 Oct 31 13:58 run -> /run/httpd
drwxr-xr-x. 2 root root 35 Nov 6 14:55 conf
现在是加载模块.SO
文件的时候了,我们刚刚复制到模块目录
在早期版本的 apache 中,如果我们想加载任何模块,我们将在 文件中使用LoadModule
指令 。httpd.conf
但是,在Apache2+httpd.conf
中,每个配置文件都位于不同的目录中,并使用 Include 指令导入。
您可以看到 httpd.conf 中有多个 INCLUDES
root@ mw-web01 # grep -i ^Include conf/httpd.conf
Include conf.modules.d/*.conf
Include sites-enabled/*
IncludeOptional conf.d/*.conf
并且所有与模块相关的配置都是从conf.modules.d目录加载的
我们 LoadModule
必须 /etc/httpd/conf.modules.d
作为新文件放在目录下。此设置将有助于有效地对模块进行分类和管理
conf.modules.d
这是添加新文件之前我的目录的快照。
root@ mw-web01 # cd conf.modules.d
root@ mw-web01 # pwd
/etc/httpd/conf.modules.d
root@ mw-web01 # ls -rlt
total 32
-rw-r--r--. 1 root root 43 Aug 19 2014 10-wsgi.conf
-rw-r--r-- 1 root root 451 Jul 26 04:43 01-cgi.conf
-rw-r--r-- 1 root root 88 Jul 26 04:43 00-systemd.conf
-rw-r--r-- 1 root root 957 Jul 26 04:43 00-proxy.conf
-rw-r--r-- 1 root root 742 Jul 26 04:43 00-mpm.conf
-rw-r--r-- 1 root root 41 Jul 26 04:43 00-lua.conf
-rw-r--r-- 1 root root 139 Jul 26 04:43 00-dav.conf
-rw-r--r-- 1 root root 3739 Jul 26 04:43 00-base.conf
root@ mw-web01 #
现在我们需要创建一个名为的新文件 mod_jk.conf
并添加以下行
LoadModule jk_module "/etc/httpd/modules/mod_jk.so"
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /etc/httpd/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
这里
JkWorkersFile 是我们将在其中定义应用程序服务器详细信息和节点等的
文件 JkLogFile 是 mod_jk 的日志,如果出现问题,最好进行故障排除
其他四个指令的任务可以很容易地通过它们的名字来解释
我们在文件里面的Step7上定义了JkWorkersFilemod_jk.conf
文件名和位置
现在是时候创建一个 Workers 文件并定义应用程序服务器 (tomcat) 详细信息了,在我的情况下,我有运行在以下主机名和端口上的 tomcat 服务器 tc_node1.techolaf.com:8009
和tc_node2.techolaf.com
:8009
这8009
是后端 Tomcat 服务器上的 AJP 端口号。
#Define the list of workers you have
worker.list=jkstatus,lb_router
# Set LOADBALANCER
worker.lb_router.type=lb
worker.jkstatus.type=status
# HERE is where you decide on how many Tomcat Server's there are in the cluster
worker.lb_router.balance_workers=tc-node1,tc-node2
worker.lb_router.sticky_session=1
# Set Worker
worker.tc-node1.port=8009
worker.tc-node1.host=tc_node1.techolaf.com
worker.tc-node1.type=ajp13
worker.tc-node1.lbfactor=1
worker.tc-node2.port=8009
worker.tc-node2.host=tc_node1.techolaf.com
worker.tc-node2.type=ajp13
worker.tc-node2.lbfactor=1
注意:*
mwitc-node1 是这里的worker名称(成员),每个应用服务器节点都会有一个专门的worker。这个worker的名字应该 和后端tomcat的server.xml文件中的JVM_Route 参数值匹配
在后端服务器中,您需要添加一个 jvmRoute 参数,并且 jvmRoute 的值应与文件中提到的 worker 名称相同。workers.properties
主机名 | 工人姓名 | JvmRoute 值 |
tc_node1.techolaf.com | tc-node1 | tc-node1 |
tc_node2.techolaf.com | tc-node2 | tc-node2 |
更新您的虚拟主机配置以启用 URI 转发
现在根据您的 apache 服务器配置返回到 Apache 网络服务器端的虚拟主机配置文件,您可以在这些路径中的任何一个中找到该文件
/etc/apache2/sites-enabled/.conf
/etc/apache2/conf.d/.conf
现在,是时候配置 apache 将请求转发到应用程序服务器了
如果 URI 路径又名上下文根匹配某个字符串。这些字符串在tomcat端基本上被称为Context-root(或)war文件名。
在虚拟主机文件的末尾,添加以下行
JkMount //* lb_router
JkMount /myapp/* lb_router
这里
JKMount
指示,这应该由mod_jk
这里myapp
指的是应用程序war文件名(或)上下文根
lb_router
引用workers.properties
文件的工作人员名称
我们在这里基本上做的是,将工作者映射到 URI 或上下文根。更像是虚拟主机配置中的位置
现在我们都准备好测试路线了。
现在使用 Web 服务器名称测试您的应用程序
http://<虚拟主机名>/
就我而言,它是
http://appbase.mwinventory.in/myapp
是时候审核日志了
root@mw-web01# tail -20f /etc/httpd/mod_jk.log
[Mon Nov 06 16:50:16 2017]lb_router appbase.mwinventory.in 0.002238
[Mon Nov 06 16:55:28 2017][24044:139753907869824] [info] init_jk::mod_jk.c (3595): mod_jk/1.2.42 initialized
[Mon Nov 06 16:55:28 2017][24044:139753907869824] [info] init_jk::mod_jk.c (3595): mod_jk/1.2.42 initialized
[Mon Nov 06 16:55:46 2017]lb_router appbase.mwinventory.in 0.002961
[Mon Nov 06 16:55:46 2017]lb_router appbase.mwinventory.in 0.013606
[Mon Nov 06 16:55:49 2017]lb_router appbase.mwinventory.in 0.005105
希望这篇文章有所帮助。