天天看點

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,如需轉載請自行聯系原作者

繼續閱讀