使用Apache 反向代理功能连接 Tomcat

http://topic.csdn.net/t/20060912/11/5015746.html

ApacheHTTPserver和Tomcatserver整合,一般是希望对于用户只公布ApacheHTTPserver的网址,而Tomcat的网址则不公布,扮演一个幕后英雄的角色。访问Tomcat的HTTP请求,通过Apache转发给Tomcat,Tomcat处理完后,将HTTP回应返回给Apache,然后ApacheHTTP回应发回给用户端浏览器。

ApacheHTTPserver和Tomcatserver直接的HTTP数据传输,有很多种方法。

方法一,使用mod_jk。很多网站上介绍到ApacheHTTPserver和Tomcatserver整合的时候,都是在介绍mod_jk.so的使用,这是一种比较老的方法,并且需要额外下载mod_jk。Apache和Tomcat的默认配置文件都需要改动。

方法二,URLrewrite,也就是对于指定格式的URL,转发给某个Tomcat的网址。这里所说的指定格式,是指Apache所使用的正则表达式,通俗地将,是一种类似*的一种比较高级通配符。这种方法不需要下在额外的文件,只需要配置Apache。

方法三,mod_proxy_ajp,仅在Apache2.1及以后的版本中可用,Apache自带的一个新功能模块。这时Apache使用ApacheJServProtocol与Tomcat通讯。不需要下在额外的文件,需要改动Apache和Tomcat的默认配置文件都需要改动。

方法四,mod_proxy。其实mod_proxy既可以做类似于Wingate一样的公司局域网共享上网代理,也可以做反向代理(Reverseproxy)。这里使用的是反向代理功能,用户端浏览器不需要把代理服务器改成这里的Apache地址。mod_proxy是Apache自带功能,并且配置比较简单。

这篇文章介绍Apache反向代理转发HTTP请求到Tomcat的配置。比较简单实用。

下载Apachewebserver2.2,安装完成后,修改安装目录下的conf/httpd.conf文件,将以下两行前的注释字符#去掉。

#LoadModuleproxy_modulemodules/mod_proxy.so

#LoadModuleproxy_http_modulemodules/mod_proxy_http.so

在这个配置文件最后,加上

ProxyPass/app1http://<tomcat_server_address>:port/url1

ProxyPassReverse/app1http://<tomcat_server_address>:port/url1

保存配置文件后重新启动Apache就可以了。当用户访问

http://<apache_server_address>/app1的时候,Apache后台自动将请求转发给Tomcat,用户只认为Apacheserver就是他所要的应用服务器。

细心的作者可以看到,Tomcat那边没有做任何改动,是不是说明,如果Tomcat换成JBoss,或者IBMWebsphere,或者BEAWeblogic,也可以用Apache来转发呢?答案是,确实如此!!

这里需要解释的是,Apache反向代理只做HTTP透明转发,因此,Tomcat那边,如果使用serveletAPI获取requesturl,serverinfo,等等,都是Tomcat的。在Tomcat上的JSP或者HTML文件里面,都应该是相对路径,不应该使用绝对路径,更不能使用带Tomcat地址的URL。这应该不是太高的要求,对不?

目前最新版的Apache自带的cache,只能配置成server或者virtualhost一级的,没有办法配置到URL一级。好在一般的J2EE应用性能问题,一般都在动态网页部分,静态网页很好,因此也没有太大关系。

对于要求比较高的应用,比如用户量多的新闻网站或者论坛网站,如果要求是用Apache缓冲后台的动态网页,比如说,我的首页可以允许缓存一分钟,则在这一分钟内,比如有两千次用户访问http://somehost/index.jsp,只有第一次用户访问,Apache会把请求转发到Tomcat,其余的999次访问,都是由Apache从缓冲中取出这个页面返回给用户看。这样后台的动态网页服务器的负荷会小很多。以目前的Apache最新版本来说,使用反向代理达不到这个要求,应该使用Apaceh新建一个virtualhost,换成使用URLrewrite。这与题目无关,就此打住。

相关推荐