Apache与Tomcat整合

八 28th, 2008

软件版本:

Apache_2.2.9-win32-x86-no_ssl-r2.msi

Php-5.2.6-Win32.zip

Mysql-5.1.26-rc-win32.zip

安装目录:

D:/xmlinux/webapp

PHP配置:

1)将D:”xmlinuxer”webapp”php5″目录下的libmysql.dllphp5ts.dll两个文件复制到C:”WINDOWS”system32″下;

2)将D:”xmlinuxer”webapp”php5″ext”目录下的php_gb2.dllphp_mysql.dll php_mbstring.dll复制到C:”WINDOWS”system32″下;

3)将D:”xmlinuxer”webapp”php5″中的php.ini-destphp.ini-recommended重命名为php.ini复制到C:”WINDOWS”system32″下;

4)改配置文件php.ini,具体包括:

i.extension_dir=”/”改为 extension_dir=”F:/ProgramFiles/PHP5.2/ext”;

ii.去掉下面三个表达式前面的“;”,改后如下:

extension=php_gd2.dll

extension=php_mbstring.dll

extension=php_mysql.dll

iii.;date.timezone = 修改为 date.timezone = PRC

Apache配置httpd.conf文件

加入支持php5mysql的代码:

LoadFile D:/xmlinuxer/webapp/php5/libmysql.dll

LoadModule php5_module D:/xmlinuxer/webapp/php5/php5apache2_2.dll

PHPIniDir “D:/xmlinuxer/webapp/php5″

AddType application/x-httpd-php .php

整合Apache Tomcat

方案一:mod_jk模块实现

适用于较低版本,在Apache2.2.*以后的的版本上无法成功实现ApacheTomcat的整合,即使编译模块通过了的话(网上很多文档都是用这种方法的资料,而且都大同小异,我试过了。。。可以模块可以编译通过,但是其实根本实现不了,因为现在mod_jk模块最高版本只支持到Httpd-2.2.4版本的而已,所以对于Apache版本高一点就的话就根本没有mod_jk与之对应的模块实现)所以对此方案测试并不能成功实现。

方案二:mod_proxy代理模块实现

Apache2.2.*以上版本本身已经支持Tomcat了,所以这里用mod_proxy来整合Tomcat打开httpd.conf文件,把

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

前面的#去掉, 并在文件最后添加

ProxyPass / ajp://127.0.0.1:8009/

ProxyPassReverse / ajp://127.0.0.1:8009/

这样做的话就相当于Apache把所有80端口的请求都转发给了Tomcat8009ProxyPass /  ajp://127.0.0.1:8009/ ProxyPassReverse  /  ajp://127.0.0.1:8009/),都由Tomcat处理请求,这时的Apache只相当于一个转发器的作用,由Tomcat解析。此时要是关闭Tomcat服务,再访问还会出现503 Service Temporarily Unavailable 错误!

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

但是我们想实现的是将请求中静态的页面交给Apache处理,动态请求交给Aomcat处理。因为他们在各自的处理效率上比较高,这才是整合ApacheTomcat的真正目的作用。

这里要实现将html交给Apache处理,而把jsp转发给Tomcat处理。还需要多刚刚修改的httpd.conf进行完善,排除掉Tomcat对静态文件的解析过滤。

即在刚刚的 ProxyPass /  ajp://127.0.0.1:8009 前面加入一行

ProxyPass /web/ !

插入这行配置的意思是表示/web/下的文件的请求不转发到Tomcat进行解析直接由Apache解析。此时只要把不想转发到Tomcat处理的放在Apache安装目录下\htdoc\ 下名为web文件夹里即可。

附录:

Mod-proxy的缺点是,当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存在这个问题。如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。

Mod-proxy优点是.可以只将Apache置于公网,节省公网IP地址资源。可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理JSPservlet等动态请求。

参考资料:IBM Developer Works中关于Apache HTTP Server Tomcat 的三种连接方式介绍的描述

目前还没有任何评论.