Apache+Tomcat+mod_jk配置教程
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)
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
3.2验证tomcat转发成功
参考:
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
http://tomcat.apache.org/connectors-doc/common_howto/loadbalancers.html