本文涉及的相关环境和版本为:CentOS-6.4-minimal
、Apache-2.2.29
、Tomcat-6.0.41
、JK-1.2.40
AJP
Tomcat提供了专门的JK插件(即常见的mod_jk)
来负责Tomcat和HTTP服务器(比如Apache、Nginx、IIS等)的通信
JK安装在对方的HTTP服务器上之后,当HTTP服务器接收到客户请求时,它会通过JK过滤URL
JK根据预先配置好的URL映射信息,决定是否把请求转发给Tomcat处理
而JK是通过AJP协议(Apache JServer Protocol)
实现apache与tomcat之间通讯的
AJP协议是为Tomcat与HTTP服务器之间通信而定制的协议,能够提供较高的通信速度和效率
ajp12已经废弃了,目前在用的是1.3版本的协议(ajpv13协议是面向包的)
大致来说,是由于以下两个原因,导致Tomcat与HTTP服务器整合时,采用AJP协议通信的效率要高于HTTP协议
- ajp采用长连接,保持了Tomcat与HTTP服务器的通信,减少了建立TCP连接的开销
- ajp采用一定的协议格式,减少了传递报文的数据大小,节省了带宽
安装JK
安装过程中,有以下两点需要注意
- 安装时要指定apache安装目录中的apxs的位置
它可以方便我们动态加载模块(安装完成后会在apapche的modules目录下生成一份mod_jk.so文件) - 安装过程中若提示autoconf或libtool not found,那么
yum -y install autoconf或libtool
即可
[root@dev software]# tar zxvf tomcat-connectors-1.2.40-src.tar.gz
[root@dev software]# cd tomcat-connectors-1.2.40-src/native/
[root@dev native]# ./buildconf.sh
[root@dev native]# ./configure --with-apxs=/app/apache/bin/apxs
[root@dev native]# make
[root@dev native]# make install
[root@dev native]# ll /app/apache/modules/
配置Tomcat
- 关闭HTTP协议
注释server.xml中的<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
- 开启AJP协议
保持server.xml中的<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
配置Apache
Apache的安装过程详见:https://www.xuanyuv.com/blog/20140926/centos-install-apache.html
-
修改/app/apache/conf/httpd.conf
开启虚拟主机:取消注释Include conf/extra/httpd-vhosts.conf 添加JK配置:增加一行Include conf/extra/httpd-jk.conf
-
创建/app/apache/conf/extra/httpd-jk.conf,内容如下
LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info
-
创建/app/apache/conf/workers.properties,内容如下
worker.list=tomcat worker.tomcat.type=ajp13 worker.tomcat.host=192.168.0.103 worker.tomcat.port=8009
-
修改/app/apache/conf/extra/httpd-vhosts.conf,增加以下内容(可用#号注释掉原有的两个
<VirtualHost *:80/>
默认配置)\<VirtualHost *:80> ServerName "www.xuanyuv.com" DocumentRoot "/app/tomcat/webapps/docs" ErrorLog "logs/www.xuanyuv.com-error.log" CustomLog "logs/www.xuanyuv.com-access.log" common \<Directory "/app/tomcat/webapps/docs"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all \</Directory> JkMount /* tomcat JkUnMount /*.html tomcat JkUnMount /*.jpg tomcat JkUnMount /*.css tomcat JkUnMount /css/* tomcat JkUnMount /js/* tomcat JkUnMount /lib/* tomcat \</VirtualHost>
监控JK连接状态
通过jkstatus可以监控JK-1.2.40连接状态,不过需要配置一下jkstatus,方法如下
- 修改workers.properties,添加以下两行内容
worker.list=status(实际上是worker.list=status,tomcat)
worker.status.type=status - httpd-vhosts.conf文件中的
<Directory/>
标签下添加一行:JkMount /jkstatus status - 重启Apache后,浏览器中访问http://192.168.0.103/jkstatus即可
默认访问时不需要密码,不过,也可以配置访问的密码,方法如下
-
修改httpd-vhosts.conf,在
<Directory/>
标签下新增如下内容\<Location /jkstatus> Options MultiViews AuthType Basic #Basic验证 AuthName "Auther Center" #弹出框的提示 AuthUserFile conf/.htpasswd #存放密码的位置 require valid-user granted #只有.htpasswd文件里面的用户才能进入 \</Location>
- 生成密码文件
执行命令:/app/apache/bin/htpasswd -c /app/apache/conf/.htpasswd admin
,即可生成一个包含用户admin的密码文件
同时会让你输入两次新用户admin的密码,最后通过ls -al
就可以看到生成的密码文件了(它是隐藏文件,需要-a
才能看到) - 修改密码:
htpasswd -m .htpasswd 用户名
- 删除用户:
htpasswd -D .htpasswd 用户名
- 最后重启apache就可以了,下面是效果图