這么一個需求:同一臺服務器上有兩個應用,如
http://hostA:8080/services和
http://hostA:8080/admin外部訪問時,需要從不同的域名訪問,如
http://services.host.com和
http://admin.host.com一開始給他們這么一個比較簡單的解決方案:
分別把services和admin兩個應用,部署到不同的兩個端口上,如
services ->
http://hostA:8081/admin ->
http://hostA:8082/接著在防火墻配兩個公網IP,然后dns上把services.host.com和admin.host.com配置到這兩個IP上。
當請求到達防火墻時,防火墻根據所訪問的ip轉發到hostA的對應端口上。
前
方用的防火墻是我們公司的Audemon
100,和公司的Audemon系統組的交流后得知,目前的防火墻版本不支持同時配置兩個ip,要到六月底才能出版本支持。!@…%#%…%¥,暈倒,好
像這是很基本的功能來的吧,居然還不支持。沒辦法,此路不通。由于防火墻是不管域名的(因為域名資料是通過應用層傳輸的),那更別指望防火墻根據域名轉發
了。
因此,我們只好提供了軟件級的解決方案,讓前方在Tomcat前加一個Apache 2.2,通過Apache的Virtual Host + AJP實現轉發。
Apache的部分配置如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName host1.com
ProxyPass / ajp://host1.com:8009/
ProxyPassReverse / ajp://host1.com:8009/
</VirtualHost>
<VirtualHost *:80>
ServerName host2.com
ProxyPass / ajp://host2.com:8019/
ProxyPassReverse / ajp://host2.com:8019/
</VirtualHost>
Tomcat也需要配置AJP Connector,如host1.com的配置
<Connector port=”8009″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />
這個方案相對于防火墻的硬件方案,性能上要差一些,但還是不錯的。
另
外還有一種方案是通過iptables的domain module來實現,但這個domain
module好像是國內的某個高手寫的,只更新到v0.02版本,并沒有提交到iptables的標準里。雖然可以用而且性能比Apache的方案要高一
些,但是風險較大,而且配置麻煩(既要編譯內核,又要配置iptables的rules),所以沒有用這種方式。
文章來源:
http://blog.163.com/ccbobo_cat/blog/static/320994622009326115641438
posted on 2009-04-26 11:57
C.B.K 閱讀(4203)
評論(0) 編輯 收藏