一、实验说明
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 自带功能,并且配置比较简单。
二、实验环境
下面我选择方法四,配置简易不复杂:
我是用两台服务器做的环境如下:
Red hat 6.2 64位 IP地址192.168.2.10和192.168.2.12
Apache部署在10那台服务器上,tomcat分别部署在两个服务器上
三、实验步骤
yum install –y gcc httpd
[端口转发配置]
通过http_proxy做tomcat的端口转发:
描述:将远程服务器映射到本地服务器的URL空间
语法:ProxyPass [路径] !|url [键=值键=值 ...]] [nocanon]
上下文:server config, virtual host, directory
状态:扩展
模块:mod_proxy
配置httpd.conf:
#保证以下模块加载
LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#配置ProxyPass
vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerAdmin [email protected] ServerName 192.168.2.10 ProxyPreserveHost On ProxyPass /one http://192.168.2.10:8080/one ProxyPassReverse /one http://192.168.2.10:8080/one ProxyPreserveHost On ProxyPass /two http://192.168.2.12:8082/two ProxyPassReverse /two http://192.168.2.12:8082/two </VirtualHost>
service httpd resload