天天看点

linux 下apache反向代理tomcat,及解决内网IP问题

一、实验说明

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

<code> </code><code>vi</code> <code>/etc/httpd/conf/httpd</code><code>.conf </code>

<code>&lt;VirtualHost *:80&gt;</code>

<code>    </code><code>ServerAdmin [email protected]</code>

<code>    </code><code>ServerName 192.168.2.10</code>

<code>    </code><code>ProxyPreserveHost On  </code>

<code>    </code><code>ProxyPass </code><code>/one</code> <code>http:</code><code>//192</code><code>.168.2.10:8080</code><code>/one</code>

<code>    </code><code>ProxyPassReverse </code><code>/one</code> <code>http:</code><code>//192</code><code>.168.2.10:8080</code><code>/one</code>

<code>    </code> 

<code>    </code><code>ProxyPreserveHost On</code>

<code>    </code><code>ProxyPass </code><code>/two</code> <code>http:</code><code>//192</code><code>.168.2.12:8082</code><code>/two</code>

<code>    </code><code>ProxyPassReverse </code><code>/two</code> <code>http:</code><code>//192</code><code>.168.2.12:8082</code><code>/two</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</code>

service httpd resload

四、反向代理 出现内网IP问题

解决方法,在配置反向代理的时候加上一行:

ProxyPreserveHost On 

例如:

ProxyPreserveHost On    #在这里加即可

ProxyPass /one http://192.168.2.10:8080/one

ProxyPassReverse /one http://192.168.2.10:8080/one

      本文转自ling118 51CTO博客,原文链接:http://blog.51cto.com/meiling/1559458,如需转载请自行联系原作者

继续阅读