RHEL5整合Apache+Tomcat,支持jsp与php

配置环境:
OS: RHEL5 with kernel 2.6.18-8.1.1.el5
httpd-2.2.3-6.el5.i386.rpm
apache-tomcat-6.0.14.tar.gz
jdk-6u3-linux-i586.bin
mod_jk-1.2.23-apache-2.2.x-linux-i686.so
官方宣称mod_jk-1.2.26-httpd-2.2.6.so支持Apache 2.2.x及2.2.6以后的版本,但经实验,1.2.26的mod_jk在RHEL5中会报错。

下载地址:
http://java.sun.com/javase/downloads/index.jsp
http://www.apache.org/dist/tomcat/tomcat-connectors
http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.23/
一、安装配置jdk及tomcat
1、安装jdk及tomcat
[root@wardking ~]# tar zxvf apache-tomcat-6.0.14.tar.gz -C /usr/local/
[root@wardking ~]# mv jdk-6u3-linux-i586.bin /usr/local/
[root@wardking ~]# cd /usr/local
[root@wardking ~]# chmod a+x jdk-6u3-linux-i586.bin
[root@wardking ~]# ./jdk-6u3-linux-i586.bin


2、配置环境
[root@wardking ~]# ln -sf /usr/local/apache-tomcat-6.0.14 /usr/local/tomcat
[root@wardking ~]# ln -sf /usr/local/jdk1.6.0_03 /usr/local/jdk6
[root@wardking ~]# ln -sf /usr/local/jdk6/bin/java /usr/bin/
[root@wardking ~]# ln -sf /usr/local/tomcat/bin/startup.sh /usr/bin/tomcat-up
[root@wardking ~]# ln -sf /usr/local/tomcat/bin/shutdown.sh /usr/bin/tomcat-down

添加一个名为“michael”的管理员用户
[root@wardking ~]# vi /usr/local/tomcat/conf/tomcat-users.xml
<user username="michael" password="123456" roles="manager,admin"/>

设置环境变量
[root@wardking ~]# vi /etc/profile
JAVA_HOME=/usr/local/jdk6
CATALINA_HOME=/usr/local/tomcat
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/servlet-api.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CATALINA_HOME CLASSPATH PATH
[root@wardking ~]# source /etc/profile

3、测试tomcat服务
[root@wardking ~]# /usr/bin/tomcat-up
或者直接执行
/usr/local/tomcat/bin/startup.sh

检查tomcat是否启动
[root@wardking ~]# netstat -anp | grep 8080

在浏览器里访问http://localhost:8080/,可以看到tomcat的网页界面,并可以使用
用户“michael”登陆管理
停止tomcat服务
# tomcat-down

二、连接tomcat到apache
1、安装mod_jk模块
# cp mod_jk-1.2.23-apache-2.2.x-linux-i686.so /etc/httpd/modules/

2、修改apache配置文件
[root@wardking ~]# cat /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk-1.2.23-apache-2.2.x-linux-i686.so
JkWorkersFile "/etc/httpd/conf/workers.properties"
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile "/var/log/httpd/mod_jk.log"
JkLogLevel info
JkMount /*/servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
AddType application/x-jsp .jsp

3、添加tomcat配置文件
[root@wardking ~]# vi /etc/httpd/conf/workers.properties
[shm]
file=/etc/httpd/logs/shm.file
size=1048576
[channel.socket:localhost:8009]
tomcatId=localhost:8009
[uri:/jsp-examples/*]
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk6
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

4、设置tomcat主目录
[root@wardking ~]# vi /usr/local/tomcat/conf/server.xml
      <Host name="localhost"  appBase="/var/www/html/"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
        <Context path="" docBase="" debug="0"/>

5、确认apache、tomcat启动

[root@wardking ~]# httpd -t
[root@wardking ~]# service httpd restart
[root@wardking ~]# /usr/bin/tomcat-up

6、分别测试访问php和jsp网页
[root@wardking ~]# vi /var/www/html/showtime.jsp
<%@page language="java" import="java.util.*"%>
Now Time is : <% out.println(new Date()); %>
[root@wardking ~]# echo '<?php phpinfo(); ?>' > phpinfo.php

在浏览器中访问http://localhost/showtime.jsp,应在网页中显示系统时间
访问http://localhost/phpinfo.php,显示php及服务器相关配置信息

另一种整合办法,在httpd.conf中使用反向代理:
ProxyPass /images !
ProxyPass /icons !
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/


Dec 31, 2008更新:
当遇到mod_jk.c (3033): missing uri map错误时,通常是在httpd.conf中配置了虚拟主机,那么应该在每一个VirtualHost部分加入JkMountCopy On。如果拥有很多虚拟主机配置段,可以使用在全部配置中写入JkMountCopy All。

原文说明如下:
引用

Hi Haroon,

the change in the status worker display that you noticed is not directly
related to your problem, only so far, as we changed a couple of things
around the mount tables.

The good: more information in the status worker.

The ugly: stricter handling of JkMount/JkMountFile etc. with respect to
virtual hosts. It should have behaved for a long time in the way, that
mounts are not inherited between virtual hosts and also not from the
global server to any virtual host.

The debug log statement you cite indicates, that there is no mount known
in a virtal host you are using.

So first question: Do you have an VirualHost in your apache httpd
configuration?

If so: first find out, which VirtualHost handles your requests. This
might be trivial, in some cases it is not trivial. If you are not sure,
you can configure a different CustomLog in the global server and for
wach VirtualHost and then check, in which CustomLog your request got logged.

Once you know, which VirtualHost handles your request, you can either:

- define all relevant JkMount/JkUnMount/JkMountfile in the VirtualHost

or

- define them globally and copy all of them into the VirtualHost by
setting "JkMountCopy On" inside the virtual host.

In case you have lots of VirtualHost and you want them all to share
several JkMounts, put them into the global server and add "JkMountCopy
all" to the global server.

I hope that is understandable?

Regards,

Rainer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值