一、實驗說明
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><VirtualHost *:80></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><</code><code>/VirtualHost</code><code>></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,如需轉載請自行聯系原作者