apache 和 tomcat 整合日记

公司官方网站是jsp structs架构的,但还想在同一服务器上开一些php的站点 ,只好整合apache和tomcat 这两个家伙,用的mod_jk2 module,其实际原理是利用ajp协议建立一个通道,将访问jsp,servlet的请求从apache转发到tomcat,再通过apache返回结果,看上去的结果就是用的同一个端口即可以访问cgi,php程序又可访问jsp页面,事实上在服务器内apache和tomcat仍旧使用的是两个监听端口,默认情况ajp协议通过8009端口连接两者。示意图如下:

安装重点步骤如下:
前面的就不说了,假设apache也装好了,并且支持so方式扩展,php也配好了,tomcat的小猫也能出现了,jdbc的jar包也拷入了,基本环境变量也都设好了,我的环境变量如下:
JAVA_HOME="/usr/java/jdk1.5.0_07"
JRE_HOME="/usr/java/jdk1.5.0_07/jre"
TOMCAT_HOME="/usr/local/tomcat"
CLASSPATH=":/usr/java/jdk1.5.0_07/lib/dt.jar:/usr/java/jdk1.5.0_07/lib/tools.jar:/usr/java/jdk1.5.0_07/lib/mysql-connector-java-3.2.0.jar:/usr/java/jdk1.5.0_07/lib/classes12.jar:/usr/local/tomcat/common/lib/servlet-api.jar"

一 从安装jk2说起

1.download  jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gz
解压后进入到jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2/目录
执行:
./configure --with-apxs2=/usr/local/apache/bin/apxs /
--with-java-home=/usr/java/jdk1.5.0_07 /
--with-tomcat41=/usr/local/tomcat /
--with-apr-lib=/usr/local/apache/lib
如果报错:
no apxs given
need to check for Perl first, apxs depends on it...
checking for perl... /usr/bin/perl
configure: error: can't locate libapr
解决办法:
安装apr-1.1.1.tar.gz, apr-util-1.1.1.tar.gz, libtool-1.5.22.tar
apr-util-1.1.1.tar.gz 在apache官方网站我没找到下的,最后用的apr-util-1.2.7.tar.gz也成功编译了。
这三个工具我都是copy到/usr/local下解压后make的,
第一个apr:
./configure
make
make insitall
第二个apr-util
./configure --with-apr=../apr
make
make install
安装完这两个后,建立如下symbolic link:
ln -s /usr/local/apr/lib/libapr-1.so.0.1.1 /usr/local/apache/lib/libapr-1.so
ln -s /usr/local/apr/lib/libapr-1.so.0.1.1 /usr/local/apache/lib/libapr-1.so.0
ln -s /usr/local/apr/lib/libaprutil-1.so.0.1.1 /usr/local/apache/lib/libaprutil-1.so
ln -s /usr/local/apr/lib/libaprutil-1.so.0.1.1 /usr/local/apache/lib/libaprutil-1.so.0

回去上面jk2目录重新编译jk2,如果/jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache2底下还没有mod_jk2.so产生,那多半就是libtool的问题,原有libtool版本太老了,装我上面说的那个版本。
装完后,删除原有apache的libtool
rm –rf /usr/local/apache/build/libtool
做新版本的libtool 的symbolic link:
ln -s /usr/local/bin/libtool /usr/local/apache/build/libtool

再回去上面jk2目录编译一下,这下应该有mod_jk2.so生成了
copy至apache module目录下:
cp mod_jk2.so /usr/local/apache/modules
再copy如下文件至apache conf目录
cp jakarta-tomcat-connectors-jk2-2.0.4-src/jk/conf/workers2.properties /usr/local/apache/conf/

再编辑apache 主配置文件:
vi /usr/local/apache/conf/httpd.conf
加入下面这行:
LoadModule jk2_module modules/mod_jk2.so

二 使用jsvc启动tomcat

让Tomcat用root身份启动很不安全,为它专门配一个帐户运行:
useradd -d /usr/local/tomcat -s /sbin/nologin -g tomcat tomcat
chown -R tomcat:tomcat /usr/local/tomcat

cd /usr/local/tomcat/bin/
tar zxvf jsvc.tar.gz
cd jsvc-src
sh support/buildconf.sh (就在这个目录执行,在别处会出错)
chmod 755 configure
./configure
make
cp native/Tomcat5.sh /usr/sbin/tomcat
chmod 755  /usr/sbin/tomcat
vi /usr/sbin/tomcat
把各个环境变量改为本地环境
需要注意的是:
TOMCAT_USER=tomcat
这就是刚才添加的tomcat用户

将2处
$DAEMON_HOME/src/native/unix/jsvc
改成:
$DAEMON_HOME/jsvc-src/jsvc

修改完保存退出
vi /etc/rc.d/rc.local
在里面添加下面这行:
/usr/sbin/tomcat start

至此,jsvc启动脚本配置完成,试试 tomcat start ,如果小猫出现,就ok啦,否则如果tomcat 的log有类似如下信息:
Java HotSpot(TM) Client VM warning: Can't detect initial thread stack location - find_vma failed
在google上搜了好久,apache的邮件列表有个人也遇到这个问题,但没人帮之正确解决,反正我感觉是权限造成的,最后我又执行了一遍
chown -R tomcat:tomcat /usr/local/tomcat
问题解决。

三 配置虚拟主机,让服务生效

我是拿/var/www/html放所有的web程序的,里面有php的,有jsp的。
以下是我的一个配置样例:
apache httpd.conf

<VirtualHost 192.168.1.100:80>
  ServerAdmin      webmaster@example.com
   DocumentRoot     /var/www/html/
    ServerName      192.168.1.100
     ErrorLog         /var/log/error_log
     CustomLog        /var/log/access_log common
     alias  /cgi-bin  /var/www/html/cgi-bin
     <Location /cgi-bin>
              Options ExecCGI
     </Location>
<Location ~ "/jspproject/">
        JkUriSet worker ajp13:localhost:8009
</Location>
</VirtualHost>

tomcat server.xml

<Host name="192.168.1.100" debug="0" appBase="/var/www/html/"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

       <Context path="" docBase="jspproject" debug="0" reloadable="ture"/>
       <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="/var/log"  prefix="example.com_log."
                 suffix=".txt"
                 timestamp="true"/>
</Host>

apache 服务端口仍是80  tomcat 仍是8080
编辑结束,保存退出
依次启动apache 和tomcat

ok, 这样一来,/var/www/html下 除 jspproject目录以外的目录或文件将以apache直接响应,url中包含 jspproject 的请求就交给tomcat来处理,基本达到了我要的效果。至于其他需要只要写好<Location>段就可以了, 详细语法见apache 手册。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值