0.说明

首先我们要弄明白mod_jk的作用是反向代理,而其实使用httpd.conf中的<VirtualHost>标签就可以实现反向代理,为什么还要多搞个mod_jk那么麻烦做反向代理。

原因是<VirtualHost>标签是http协议反向代理到8080端口,mod_jk是ajp协议反向代理到8009端口;http协议tcp只保持短时间连接要经常进行tcp三次握手四次挥手,ajp协议tcp保持长时间连接反向代理开销就比较小。

1.下载

apache–yum install httpd -y

tomcat下载链接–http://tomcat.apache.org/

mod_jk下载链接–http://tomcat.apache.org/download-connectors.cgi

本文以httpd-2.2.15+tomcat-8.5.14+mod_jk-1.2.42为例

httpd通过yum安装配置全为默认(由于最后一步验证中我使用php进行验证所以多装了php,最简lamp配置可参考链接;不需要apache解析php的话可以不用管php的,apache功能没什么必要验证)

tomcat直接下载接压也未修改配置,安装目录/usr/myapp/apache-tomcat-8.5.14/,这两者就不多辍述了。

2.mod_jk安装配置

首先要清楚“Apache+Tomcat+mod_jk配置”到底要做什么,一是编译生成mod_jk模块,二是在apache中加载mod_jk并对其进行配置,三是在tomcat中修改配置以使其能接受mod_jk的转发。

2.1编译生成mod_jk模块

编译生成mod_jk.so,然后将其复制到httpd加载模块默认的目录/etc/httpd/modules

yum install httpd-devel -y    #编译生成apache扩展依赖apxs,如未安装先安装
wget
http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz tar -zxf tomcat-connectors-1.2.42-src.tar.gz cd tomcat-connectors-1.2.42-src/native/ ./configure --with-apxs=/usr/sbin/apxs make cp ./apache-2.0/mod_jk.so /etc/httpd/modules/

2.2在apache中加载mod_jk并对其进行配置

cd /etc/httpd/conf.d/
cat > mod_jk.conf << EOF
# Load mod_jk module
LoadModule    jk_module  modules/mod_jk.so
# Add the module (activate this lne for Apache 1.3)
# AddModule     mod_jk.c
# Where to find workers.properties
JkWorkersFile conf.d/workers.properties
# Where to put jk shared memory
JkShmFile     log/httpd/mod_jk.shm
# Where to put jk logs
JkLogFile     log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Send requests for context /examples to worker named worker1
JkMount  /examples/* tomcat1
EOF

LoadModule行–加载mod_jk模块
JkWorkersFile行–worker连接配置文件所在路径,文件需要自己创建。路径继承了ServerRoot,所以完整路径为/etc/httpd/conf.d/workers.properties;当然也可以使用决对路径指定为其他任意位置。后边几个配置同此。
JkShmFile行–mod_jk共享内存文件在放位置,文件不需要自己创建
JkLogFile行–mod_jk日志存放位置,文件不需要自己创建
JkLogLevel行–mod_jk日志记录级别
JkMount行–将/examples/开头的请示都转由tomcat1处理

 JkWorkersFile行我们指定了worker的连接配置文件路径,所谓worker就是在这里就是tomcat。所以我们要创建/etc/httpd/conf.d/workers.properties文件,并写入tomcat的连接信息

cd /etc/httpd/conf.d
cat > workers.properties << EOF
# Define 1 real worker using ajp13
worker.list=tomcat1
# Set properties for worker1 (ajp13)
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
EOF

worker.list行–worker列表。如有多个使用逗号(半角)隔开。

worker.tomcat1.type行–连接tomcat1使用的协议及版本。如果配置其他worker,将tomcat1改成相应worker名即可。

worker.tomcat1.host行–tomcat1的域名(包括/etc/hosts)或ip地址。如果配置其他worker,将tomcat1改成相应worker名即可。

worker.tomcat1.port行–tomcat1的ajp端口,默认8009。(tomcat监听8009端口的意义就在这 里)。

说明:已验证如上所述来配置多个worker是可以了,为了简洁起见这里就不演示了。

2.3 tomcat配置jvmRoute

在workers.properties中我们指定了woker名为tomcat1,但在tomcat一侧并不知道tomcat1就是指它。就比如别人给你起代号9527没通知你,然后到你家跟你说找9527,你并不知道就是找你一样。

我们需要找到$CATALINA_HOME/conf/server.xml中的Engine标签,配置其jvmRoute属性值为worker名(这里就是tomcat1)

Apache+Tomcat+mod_jk配置教程-冯金伟博客园

2.4重启apache和tomcat使配置生效

service httpd restart
cd /usr/myapp/apache-tomcat-8.5.14/bin   #根据自己tomcat目录修改路径
./shutdown.sh
./startup.sh

3 功能实现验证

验证apache功能正常–创建经典的phpinfo.php并访问,如果正常显示则说明apache原先的功能都正常。

验证tomcat转发成功–上边mod_jk.conf中我们配置了/examples/开头的请示都转由tomcat1处理,如果我们访问http://127.0.0.1/examples/其结果是tomcat显示其webapps/examples目录的内容则说明转发成功。

3.1验证apache功能正常

cd /var/www/html     #进入apache默认主目录
cat > phpinfo.php << EOF
<?php
        phpinfo()
?>
EOF

Apache+Tomcat+mod_jk配置教程-冯金伟博客园

 3.2验证tomcat转发成功

Apache+Tomcat+mod_jk配置教程-冯金伟博客园

参考:

http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

http://tomcat.apache.org/connectors-doc/common_howto/loadbalancers.html

https://stackoverflow.com/questions/3666649/apache-httpd-2-2-x-mod-jk-1-2-30-tomcat-6-error-could-not-find-worker-with