MOD_JK 安装和配置——Apache HTTPD 和 Tomcat

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+ 

我们走吧

Step1:确保apache服务正在运行

apachectl status

启动服务(如果还没有)

apachectl start

 

Step2:安装依赖

在安装 Mod_JK 之前,您必须安装一些依赖项

yum install httpd-devel ( source of apxs )
yum install gcc libtool

 

Step3:从tomcat网站下载mod_jk连接器(tar.gz格式)

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

 

第四步:配置APXS

在同一本机目录中运行以下命令

./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 命令

Step5:执行 Make 命令

执行 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目录了,

Step6:将生成的 mod_jk.so 文件复制到 apache 模块

如果您列出目录的内容,您可以看到 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

 

Step7: 加载模块 mod_jk.so

现在是加载模块.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 的日志,如果出现问题,最好进行故障排除

其他四个指令的任务可以很容易地通过它们的名字来解释

 

Step8:创建工人(他们是我们的奴才!!)

我们在文件里面的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 参数值匹配

 

Step8:在server.xml中添加JVMRoute

在后端服务器中,您需要添加一个 jvmRoute 参数,并且 jvmRoute 的值应与文件中提到的 worker 名称相同。workers.properties

主机名 工人姓名 JvmRoute 值
tc_node1.techolaf.com tc-node1 tc-node1
tc_node2.techolaf.com tc-node2 tc-node2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tc-node1">

 

第 9 步:更新您的 Apache 虚拟主机文件并添加 JKMount

更新您的虚拟主机配置以启用 URI 转发

现在根据您的 apache 服务器配置返回到 Apache 网络服务器端的虚拟主机配置文件,您可以在这些路径中的任何一个中找到该文件

/etc/apache2/sites-enabled/<your-app-name>.conf
/etc/apache2/conf.d/<your-app-name>.conf

现在,是时候配置 apache 将请求转发到应用程序服务器了

如果 URI 路径又名上下文根匹配某个字符串。这些字符串在tomcat端基本上被称为Context-root(或)war文件名。

在虚拟主机文件的末尾,添加以下行

JkMount /<Your Application Name>/* lb_router
JkMount /myapp/* lb_router

这里

JKMount 指示,这应该由mod_jk

这里myapp 指的是应用程序war文件名(或)上下文根

lb_router 引用workers.properties文件的工作人员名称

我们在这里基本上做的是,将工作者映射到 URI 或上下文根。更像是虚拟主机配置中的位置

现在我们都准备好测试路线了。

现在使用 Web 服务器名称测试您的应用程序

http://<虚拟主机名>/<contextroot>

就我而言,它是

http://appbase.mwinventory.in/myapp

第 9 步:验证日志 - 审核日志

是时候审核日志了

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


希望这篇文章有所帮助。

猜你喜欢

转载自blog.csdn.net/allway2/article/details/126257059