利用apache的proxy-ajp做apache与tomcat的结合

apache版本要求 2.2.x
首先装载下面2个模块
启用下面这一行
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
用proxy-ajp方法。这个我测试了可行。目前项目中一直都是使用的这个办法。
8009是你的Tomcat的ajp默认端口。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ProxyPass /app ajp://localhost:8009/app
# 这个可以放虚拟主机里 也可以放全局。
域名+/app 就会转发到tomcat下对应的工程app去了。
如 tomcat下一个工程叫 ibanbao
<VirtualHost *:80>
ServerName www.ff-bb.cn
DocumentRoot "D:/Apache2.2/htdocs/test"
ProxyPass /ibanbao ajp://localhost:8009/ibanbao
</VirtualHost>
===================================================================
apache ProxyPass ProxyPassReverse概述
       mod_proxy代理的作用主要就是进行url的转发,而应用转发功能,可以实现同tomcat等应用服务器的整合,同时也可以实现web集群负载均衡的功能。以下先介绍大致的规则:
       proxy是位于客户端与实际的服务器之间的服务器,一般称为facade server,负责将外部的请求分流,也负责对内部的响应做一些必要的处理。如果结合mod_cache,则可提高访问速度,适当的减轻网络流量压力。闲话少说,直接拿个例子来:
    设本站地址为 www.test.com
    ProxyPass /images/ !
    ProxyPass /js/ !
    ProxyPass /css/ !
    ProxyPass /example http://www.example.com/
    ProxyPassReverse /example http://www.example.com/
    ProxyPass / ajp://127.0.0.1:8009/
    ProxyPassReverse / ajp://127.0.0.1:8009/
    还是上一篇的例子,ProxyPass易理解,就是转发url上的请求,而其中的配置顺序也是需要遵守 。要禁止转发的url需要放在一般的请求之前。对于 http://www.test.com/images/ http://www.test.com/js/ http://www.test.com/css/的请求是不予转发的,对于 http://www.test.com/example/的请求,会转发到 http://www.example.com。
    值得注意的就是ProxyPassReverse的配置了,这是反向代理。为什么要在这里加上这样的配置?我们来看个例子:
    在没有加这样的反向代理设置的情况下,访问 http://www.test.com/example/a,如果 www.example.com对请求进行了redirect至 http://www.example.com/b,那么,客户端就会绕过反向代理,进而访问 http://www.test.com/example/b。如果设置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为 http://www.test.com/example/a/b,即是在原请求之后追加上了redirect的路径。
更多更详细的关于mod_proxy的描述可以参见手册:
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_proxy.html
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/paulluo0739/archive/2008/04/08/2260137.aspx
=======================================================================

一、配置ProxyPass以及ProxyPassReverse规则,实现apache和tomcat的整合。

在httpd.conf最后加上:

ProxyPass /images/ !
ProxyPass /js/ !
ProxyPass /css/ !
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/

前三行是表示禁止转发该路径的请求,一般来说是静态的。
后两行自然是转发所有的访问至8009也就是tomcat的ajp端口。

这样则完成了同tomcat的整合。

值得注意的是,同tomcat的整合还有一种tomcat-connector的方式,也就是 mod_jk,那种的配置更灵活,适用性更高。但是由于其复杂性(目前已经没有更新版本),同时apache2.2版本开始,自身整合了mod_proxy和 mod_proxy_ajp模块,实现了更简单的同tomcat的整合,所以建议采用这种方式了。


二、整合之后,测试
写了一个简单的phpinfo()测试,却提示下载.......这是怎么回事呢?记得上面的ProxyPass配置不?就是这个地方了,它将所有的/的访问转到了tomcat,自然是没办法处理php的了。
在网上也搜了一下相关的处理办法,我的想法是能够做到*.php的都不转发,然而ProxyPass好像只支持url的方式,不支持正则匹配,一般的解决办法是比如建一个php的目录,那么在ProxyPass /php !来实现对php的处理。很明显不是一个好的解决办法,如果我的php和jsp混和在一起的,从url上就不能控制了。既便分开,始终要加上一个不必要的路径以区分对php的处理,实在不爽。

经过一番google,找到一种解决办法,那就是配置虚拟主机。
在conf最下面加:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName a.test.com
DocumentRoot /php
DirectoryIndex index.html index.php
<Directory "/php">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>


<VirtualHost *:80>
ServerName www.test.com
DocumentRoot /www
DirectoryIndex index.html index.jsp
<Directory "/www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ProxyPass /images/ !
ProxyPass /js/ !
ProxyPass /css/ !
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
</VirtualHost>
这样就实现了当访问a.test.com时,apache解析php那个目录,而访问www.test.com时,解释www那个目录,并转发至tomcat。运行测试成功!

你可能感兴趣的:(职场,休闲,proxy-ajp)