Apache 反向代理功能连接 Tomcat

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

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

Apache HTTP server 和Tomcat server 直接的HTTP 数据传输,有很多种方法。

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

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

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

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

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

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

#LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

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

ProxyPass /app1 http://:port/url1

ProxyPassReverse /app1 http://:port/url1

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

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

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

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

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

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

相关主题
相关文档
最新文档