日期:2014-05-17  浏览次数:20650 次

apache2.2+tomcat6 整合 ajp_proxy 代理

配置成功,记录下来。

apache2.2中加入了ajp_proxy反向代理,配置比起mod_jk来说,要简便的多。 因为ajp_proxy在apache2.2中才有,所以网上资料并不多。

1.安装好apache和tomcat后,找开apache目录下conf下的httpd.conf文件,将以下三项前面的#号去掉

?

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

?

?

?

?


?

2.再在文件下方写入

?

?

ProxyPass / ajp://127.0.0.1:8009/

ProxyPassReverse / ajp://127.0.0.1:8009/

?

?

?

?


?代表将所有请求给tomcat处理。 ajp://127.0.0.1:8009? 表示你本机上的tomcat的ajp商品号。

光凭以上的配置已经可以访问到程序了。

当然还可以加入指定文件目录下的请求给apache处理。apache对静态资源处理的效率比tomcat高,你懂的。

?如果忽略第三步,加入下面一段后,apache就访问了不了静态文件了,等找到原因后再贴上来。

? 原因找到:要指定DocumentRoot 为程序目录(为防止冲突,建议配虚拟机)

?

?

ProxyPass /resources !

ProxyPass /images !

ProxyPass /css !

proxyPass /js !

?

?

?

?


???

?3.配置虚拟机。 再住文件下加入以下代码:

?? 有很多文档说在?conf/extra/httpd-vhosts.conf这个文件里写,其实在httpd.conf里写也行,我比较懒,就写这了

?

?

收工。

输入127.0.0.1打开程序。

<VirtualHost *:80> ServerAdmin xxx@xxx.com ServerName apache <Directory "G:/xxxx/ROOT/"> ##增加apache对程序目录下文件的访问权限,可写在外面。 Order Deny,Allow Allow from all </Directory> DocumentRoot "G:/xxx/ROOT/" ##程序的目录 ServerAlias 127.0.0.1 ##可以直接以此ip访问 ProxyPass /jsp ajp://127.0.0.1:8009/ ProxyPassReverse /jsp ajp://127.0.0.1:8009/ ErrorLog "logs/lbtest-error.log" </VirtualHost>

?


?

?

?

?

?遇到如下错误:

?

1.?client denied by server configuration:“D:XXX”??? 客户端拒绝请求,没有权限

?检查hpptd.conf中是否有以下配置:

? <Directory "D:/xxx">
?????? Order Deny,Allow
?????? Allow from all
??? </Directory>

?

2.?Directory index forbidden by Options directive:"D:xxx"? 和权限也有关系,也可能没有设置index文件

?检查hpptd.conf中是否有以下配置:

DirectoryIndex index.html index.jsp

?

3.使用BackUpManager与DeltaManager方式时,在tomcat集群配置时用的不同。

?具体请看这个。http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html,仔细看是有些区别的。当从DeltaManager转向BackUpManager时,

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

?

这一不删除会报,但对程序的影响不是很大。

<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

?

如果不加上这一行,apache分均匀的将请求分发给tomcat,轮流分发。如果加上,就会将请求全部发给一个tomcat,直到这个tomcat挂掉。